【问题标题】:Undefined reference error linking shared object链接共享对象的未定义引用错误
【发布时间】:2012-09-08 21:40:18
【问题描述】:

我有 共享库,它依赖于一些 静态库,其中包括 zlib 等。当我使用使用g ++(cent os 6.3)的依赖静态库编译得很好。现在,当我尝试在测试项目中使用我的共享库时,我遇到了很多未解决的错误。我做错了什么?

g++ -L/usr/local/lib -L/home/de.../workspace/libtest/Debug -o "mytest" ./src/mytest.o -ltest

/home/de.../workspace/libtest/Debug/libtest.so:未定义对 `BZ2_bzCompressEnd' 的引用

collect2: ld 返回 1 个退出状态

【问题讨论】:

    标签: gcc g++ centos shared


    【解决方案1】:

    该错误使您看起来也需要链接到 bzip2:

    g++ -L/usr/local/lib -L/home/de.../workspace/libtest/Debug -o "mytest" ./src/mytest.o -ltest -lbz2
    

    您确实需要小心将静态库链接到共享库中,但您会看到此错误,因为您需要链接其余库。

    【讨论】:

    • 但是会失去使用静态依赖的目的。我已经创建了一个包含所有静态依赖项的共享对象。现在所有应用程序只需要一个依赖共享对象。即使在链接 bz2 之后也不能解决问题。
    • 你需要确保静态库是用-fPIC编译的,就可以了。您可能还需要使用 -Wl,-Bstatic 之类的东西来确保 gcc 链接到您指定的库的静态版本。如果你不这样做,它会默认选择共享版本。
    • 你的意思是我必须用 -fPIC 选项重建静态库还是只重建共享库?
    • 共享库的依赖关系,以及库本身。不过,我并不是要绕开你——我只是在警告你这个问题。您说您正在构建一个共享库以供您的应用程序使用...该库在命令行中的什么位置?请注意,.o 与共享库不同。 .o 不会与依赖项相关联。该命令行上的某处应该是-lyour_shared_library
    • 您介意详细说明您是如何解决这个问题的吗?我有一个相同的问题,我从三个 .a 库构建一个 .so 库。我用 -fPIC 编译了所有三个,并且共享库构建良好,但是当我尝试构建示例程序时,它在链接阶段失败,对静态库的引用未定义。
    猜你喜欢
    • 2011-12-03
    • 1970-01-01
    • 1970-01-01
    • 2017-03-13
    • 2016-03-02
    • 2021-10-25
    • 2013-06-21
    • 2019-02-12
    • 1970-01-01
    相关资源
    最近更新 更多