1

これは、タイトルが考えるほど単純ではありません。

実行可能ファイルとリンクしようとしているサードパーティの共有ライブラリのいくつかの関数シンボルについて、linker/ld から「未定義の参照」エラーを受け取ります。

奇妙な点は、そのライブラリ自体に問題のある問題のシンボルの定義が含まれていることです。

奇妙な部分は、私のプロジェクトにいくつかの実行可能ファイルがあり、この問題に直面しているものとそうでないものがあることです。

gcc/ld フラグを台無しにしましたか、それとも何か他のものですか?

4

2 に答える 2

1

リンク順を確認しましたか?これは、最近のバージョンの GCC ではより厳しくなっています。

たとえば、これを行うと、一般的な問題が発生します。

g++ -lX11 -lSuperLibrary awesomeApp.cpp

これの代わりに:

g++ awesomeApp.cpp -lX11 -lSuperLibrary

ライブラリフラグが相互に依存している場合、それらの順序も重要です。

あなたの問題を解決するのに役立つかもしれないライブラリマルチパスを行うためのフラグがあります。上記と同じが、リンカーの「グループ化」ライブラリを使用し、それらに再帰リンクを実行する(リンカーのパフォーマンスコストで)、次のようなことを行うことができます。

g++ awesomeApp.cpp -Wl,--start-group -lX11 -lSuperLibrary -Wl,--end-group

-Wl,<option>リンカーにオプションを渡す場所...この場合--start-group--end-group.

リンクの順序が重要である理由の素晴らしいアナロジーはここにあります

それが役立つことを願っています。

于 2012-08-15T09:59:00.887 に答える
0

有益な情報がほとんど含まれていないあなたの説明からは何とも言えません。1 つの可能性は、一部のソース ファイルに正しいヘッダー ファイルが含まれていないことです。

于 2009-12-16T15:22:05.317 に答える