链接器错误:对共享对象的未定义引用

时间:2011-10-08 18:36:27

标签: c compilation linker makefile shared-libraries

我正在尝试在我的C程序中使用名为iniparser的外部库。我正在使用gcc 4.4。

我将iniparser库放在一个名为lib/的子目录中,头文件位于lib / iniparser / src中,库被编译为lib/iniparser/libiniparser.so.0

我编写了一个简短的Makefile来编译它,这里是make的输出:

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

首先成功调用gcc编译smag_main.o,第二个编译agros.o,第三个编译main.o。第四个调用是链接器,它将所有这些对象链接到可执行文件agros。它显然失败了。

看起来在链接时查找iniparser.so时遇到问题。我的电话怎么了? 我很迷惑。

(替代问题,如果有人可以通过直接调用ld来解释如何进行链接,那就太棒了。

1 个答案:

答案 0 :(得分:4)

尝试将libiniparser.so.0的符号链接添加到libiniparser.so

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