2017-03-29 15 views
0

私はコンパイルする必要があります。最も重要なのは、functionという共有ライブラリファイルに存在するCプログラムをリンクする必要があります。以前の開発チームとのコミュニケーションが不足しているため、適切な文書がありません。Linux上でgccと共有ライブラリをリンクする

gcc -L/customlibs testing.c -o testing -lcustom 
:その関数名は /customlibs/libcustom.soからgreppedすることができますので

int CustomFunction(unsigned char *in, int size); 

、私はコードをコンパイルし、このようにそれをリンクしてみました:私は(私は引数の数と種類を知っているので)関数のプロトタイプを宣言しましたこのように見ていくつかのエラーメッセージがスロー

:明らか

/customlibs/libcustom.so: undefined reference to `AnotherCustomFunction' 

は、私はwoのものを作るために、同様に他のライブラリが含まれるようにリンカを伝える、とする必要がありますrse、彼らは特定の順序である必要があります。私はLD_LIBRARY_PATH-Wl,-rpath=,-Wl,--no-undefinedおよび-Wl,--start-groupを使ってエクスポートしようとしました。リンカーにすべての.soファイルを適切な順序なしで与える簡単な方法はありますか?

答えて

0

これをコマンドラインに追加する方法があります。以下のようなものLD_LIBRARY_PATHはgccにライブラリを探す場所を指示しますが、インクルードするライブラリを指定する必要があります。

のgcc -L/customlibs testing.c -oテスト-lcustom -lmylib1 -lmylib2 -lmylib3

+0

私はそれを試しましたが、それはより多くの未定義の参照について文句を言います – Ulrik

+3

Ulrik、どちらが参考になりますか?さらにライブラリを追加する必要があります。また、すべての共有ライブラリで 'ldd'コマンドを実行して、依存するライブラリを抽出し、[topological sort](https://en.wikipedia.org/wiki/Topological_sorting)またはリンクコマンド([ - ( 'と' - ) 'オプションの組の間に[(http://stackoverflow.com/a/5651895/196561))にそれらをすべて追加しようとします。 – osgx

+0

'-Wl、 - start-group -lcustom1 -lcutom2 ... -Wl、-end-group'ですべての共有ライブラリを追加すると' /customlibs/libcustom.so:undefined reference 'AnotherCustomFunction'に – Ulrik

1

あなたはまた、例えば、のgcc -Iオプションを追加することで、共有ライブラリのすべてのヘッダファイルを含める必要があります:gcc [...] -I/path/to/your/lib/header/files [...]

0

問題に解決策(または回避策)が見つかりました:-Wl,--warn-unresolved-symbolsを追加すると、エラーが警告に変わります。これは、あなたの関数がundefined refernce to:メッセージに記載されているシンボルに依存していないことが絶対にわかっている場合にのみ機能することに注意してください。

関連する問題