2017-11-17 19 views
-3

これは基本的な質問ですが、どのライブラリをgccとリンクする必要がありますか? #include <signal.h>を使用する共有ライブラリをコンパイルしようとしていますが、使用しようとするとシンボルが見つからないため実行できません。 gccのフラグ-lでライブラリと具体的にリンクする必要があると仮定していますが、そのライブラリがどこにあるかわかりません。特定のライブラリをgccにリンクする

より広範な例では、とのリンク、-l#include <signal.h>とリンクするために使用できますか?

EDIT:使用してコンパイル

soinfo_link_image(linker.cpp:1617): could not load library "mylib.so" needed by "/bin/test"; 
cause by soinfo_relocate(linker.cpp:975): cannot locate symbol "signal" referenced by "mylib.so"...CANNOT LINK EXECUTABLE 

gcc -fPIC -c -g -o mylib.o mylib.c 
gcc -shared -o mylib.so mylib.o -ldl 
+1

ライブラリを実行しますか? –

+3

ライブラリ名にはヘッダーの名前と系統的な関係がないため、すべての場合に有効な手順はありません。 'pkg-config'のようないくつかの場合に役立つツールがありますが、それらをサポートするためにはライブラリをコード化する必要があります。特定の 'signal.h 'の場合、特別な' -l'スイッチはまったく必要ないはずです。あなたの問題は何か他のものによって引き起こされるか、Cライブラリが壊れています。実際に何が起こっているのかを理解するために、質問に記載されているエラーメッセージの完全で未編集のテキストをコピーして貼り付けてください。 – zwol

+1

いくつかのエラーがありますか?これらのエラーメッセージの内容は、おそらく少なくとも* *質問と多少関連していませんか? –

答えて

0

これはGCCの質問よりもリンカの質問の詳細です。多くの場合、ライブラリの名前はライブラリのマニュアルに記載されています。 GNU/Linuxディストリビューションでは、pkg-configのファイルは多くのライブラリに.pcというファイルがあります。ない場合は、ヘッダファイルを提供-dev/-develパッケージを見つけるために

dpkg -S /usr/include/signal.h 

rpm -qf /usr/include/signal.h 

のようなコマンドを使用して、

dpkg -L libc6-dev 

を見て進むことができますまたは

rpm -ql glibc-devel 

出力を使用して、リンクに使用されるファイル.soの名前を特定します。定義済みのシンボルは、objdump -T,nm -Dg、またはeu-readelf --symbols=.dynsym(多くの選択肢)を使用して表示できます。

関連する問題