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

时间:2016-02-02 14:57:25

标签: c++ boost linker g++ undefined-reference

我有一个非常复杂的构建,它涉及许多静态和共享库,使用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

从我可以告诉谷歌,这意味着我应该将-lboost_filesystem添加到我的链接命令行 - 但它已经存在!我理解库的顺序通常也很重要,但我认为用-Wl,--start-group-Wl,--end-group围绕对象和库应该使它无关紧要 - 无论如何,我想我已经得到了订购权。那是怎么回事?

0 个答案:

没有答案