2011-07-18 9 views
4

共有ライブラリmy.soの1つは、バージョンtest..2.3をライブラリtest.so.bのシンボルとして使用しています。 my.so共有ライブラリを実行可能ファイルにリンクすると、 '参照されていないシンボルシンボル@@ test_1.2.3'と表示されます。gccバージョンベースのライブラリの未参照シンボル

g++ -o myexecutable myexecutable.o -L/path-to-my.so -lmy -L/path-to-test.so -ltest 

私はへのリンクリンクを変更する場合 - -

g++ -o myexecutable myexecutable.o -L/path-to-my.so -lmy /path-to-test.so/libtest.so 

それが動作する、以下のようにリンク・ラインがある場合に発生します。

-Lで指定した場合、libtest.soが選択されないのはなぜですか?完全なパスとして指定されているのはなぜですか?

+0

最初の例で '-ltest'と' -lmy'の順序を入れ替えてみましたか? –

+0

あなたの返事をありがとう。私は質問を投稿する前にこれを試しましたが、助けにはなりませんでした。 – Kartlee

+0

'g ++ -o myexecutable myexecutable.o -L/path-to-my.so/libmy.so/path-to-test.so/libtest.so'のように、両方のライブラリのパスを変更しようとしましたか? –

答えて

2

別のlibtest(おそらくlibtest.a)があり、あなたのプログラムが探しているシンボルを持っていないものが最初に見つかったと思われます。

-Wl,--verboseオプションを使用すると、開いているファイルまたは開こうとしているファイルに関する冗長な出力をリンカーに提供できます。それはなぜあなたが1つのランが別のランと違って動作しているのか、そして '不正な' libtestがあればそれがどこにあるのかを教えてください。

+0

デバッグオプションを使用して問題を調査しました。ライブラリは、このオプションなしで調査することが難しいネストされた場所から選択されていました。ありがとう。 – Kartlee

関連する問題