【问题标题】:Linker error: undefined reference to shared object链接器错误:对共享对象的未定义引用
【发布时间】:2011-12-03 16:16:27
【问题描述】:

我正在尝试在我的 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。第 4 个调用是链接器,它将所有这些对象链接到一个可执行文件agros。显然失败了。

在链接时定位 iniparser.so 似乎有问题。我的电话怎么打错了?
我很迷惑。

(另一个问题,如果有人可以通过直接调用ld 来解释如何链接,那就太好了)。

【问题讨论】:

    标签: c compilation linker makefile shared-libraries


    【解决方案1】:

    尝试将符号链接从libiniparser.so.0 放到libiniparser.so

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

    【讨论】:

    • 当您给出命令 -liniparser 时,链接器正在寻找具有特定名称的库。基本上是 libiniparser.a(用于静态库)或 libiniparser.so(用于共享库)。有一个名为 libiniparser.so.0 的文件是有原因的。有关详细信息,请参见此处:tldp.org/HOWTO/Program-Library-HOWTO/shared-libraries.html
    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2017-03-13
    • 2021-10-25
    • 2016-03-02
    • 2013-06-21
    • 2022-01-01
    • 1970-01-01
    相关资源
    最近更新 更多