g++ - “命令行中缺少 DSO”

g++ - "DSO missing from command line"

提问人:Tom 提问时间:2/2/2016 更新时间:2/2/2016 访问量:2335

问:

我有一个相当复杂的构建,其中涉及许多静态和共享库,这些库使用 G++ 4.8 链接到 Ubuntu 14.04 上的可执行文件中。这个例子太复杂了,无法在这里重现,但它相当于这样:

我在代码中使用 boost 文件系统库中的函数,然后将其存档到静态库中,调用它。my_lib.a

然后我是这样链接的:

g++ -g -o Build/main -L Build/libs -Wl,--start-group ...lots of libraries here... \
    Build/libs/my_lib.a -lboost_filesystem -Wl,--end-group

当我运行它时,我得到:

/usr/bin/ld: Build/my_lib.a(my_code.o): undefined reference to symbol '_ZN5boost10filesystem4pathdVERKS1_'
/usr/lib/gcc/x86_64-linux-gnu/4.8/../../../x86_64-linux-gnu/libboost_filesystem.so: error adding symbols: DSO missing from command line

从我从谷歌上可以看出,这意味着我应该添加到我的链接命令行中 - 但它已经在那里了!我知道库的顺序通常也很重要,但我认为用 and 应该使对象和库变得无关紧要 - 无论如何,我认为我的顺序是正确的。那么这是怎么回事呢?-lboost_filesystem-Wl,--start-group-Wl,--end-group

C Boost Linker G++ 未定义引用

评论

0赞 J.J. Hakala 2/2/2016
这可能是相关的,stackoverflow.com/a/17988317/5781248
0赞 Tom 2/2/2016
谢谢,我会尝试其中的一些建议。
0赞 Tom 2/10/2016
我已经切换到 boost 1.60.0,它是从头开始构建的,它对这个错误没有影响。--std=c++11
0赞 perror 7/19/2017
奇怪的链接错误的可能重复:命令行中缺少 DSO

答: 暂无答案