我试图在我的C程序中使用名为iniparser
的外部库。我用的是GCC4.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
来解释如何链接,那就太好了)。 最佳答案
尝试将符号链接从libiniparser.so.0
放到libiniparser.so
cd lib/iniparser/
ln -s libiniparser.so.0 libiniparser.so