2011-10-08 21 views
1

Cプログラムでiniparserという外部ライブラリを使用しようとしています。私はgcc 4.4を使用しています。リンカーエラー:未定義の共有オブジェクトへの参照

iniparserライブラリはlib/というサブディレクトリにあり、ヘッダファイルはlib/iniparser/srcにあり、ライブラリはlib/iniparser/libiniparser.so.0にコンパイルされています。

私はそれをコンパイルするために短いMakefileを書いて、ここでmakeの出力があります:gccのコンパイルに

gcc -Wall -Wextra -Werror -c -I include/ src/smag_main.c -L lib/iniparser -liniparser -I lib/iniparser/src 
gcc -Wall -Wextra -Werror -c -I include/ -L lib/iniparser -liniparser -I lib/iniparser/src src/agros.c 
gcc -Wall -Wextra -Werror -c -I include/ -L lib/iniparser -liniparser -I lib/iniparser/src src/main.c 
gcc -Wall -Wextra -Werror -L lib/iniparser -liniparser -o agros smag_main.o main.o agros.o 
smag_main.o: In function `sec_haskey': 
smag_main.c:(.text+0xa9): undefined reference to `iniparser_find_entry' 
smag_main.o: In function `parse_config': 
smag_main.c:(.text+0x153): undefined reference to `iniparser_load' 
smag_main.c:(.text+0x18b): undefined reference to `iniparser_getint' 
smag_main.c:(.text+0x1c6): undefined reference to `iniparser_getstring' 
smag_main.c:(.text+0x202): undefined reference to `iniparser_getstring' 
smag_main.c:(.text+0x261): undefined reference to `iniparser_getstring' 
smag_main.c:(.text+0x2c2): undefined reference to `iniparser_getint' 
smag_main.c:(.text+0x2d5): undefined reference to `iniparser_freedict' 
collect2: ld returned 1 exit status 
make: *** [agros] Error 1 

最初の呼び出しはsmag_main.o成功し、もう一つはagros.oと第三1 main.oをコンパイルします。 4番目の呼び出しはリンカーであり、これらのオブジェクトはすべて実行可能ファイルagrosにリンクされます。明らかに失敗します。

リンク時にiniparser.soを見つけるのに問題があるようです。私の電話はどうやって間違っていますか
私は混乱しています。

(誰かがリンクする方法を説明できる場合は、ldを直接呼び出すとそれはすばらしいことになります)。

答えて

4

は、それが働いたlibiniparser.so.0からlibiniparser.so

cd lib/iniparser/ 
ln -s libiniparser.so.0 libiniparser.so 
+0

へのシンボリックリンクを置くことに感謝してみてください。この標準的な振る舞いですか?何故ですか? – rahmu

+0

-liniparserコマンドを実行すると、リンカーは特定の名前のライブラリを探しています。基本的にはlibiniparser.a(静的ライブラリの場合)またはlibiniparser.so(共有ライブラリの場合)。 libiniparser.so.0という名前のファイルがある理由があります。詳細はこちら:http://tldp.org/HOWTO/Program-Library-HOWTO/shared-libraries.html – codehippo

関連する問題