我有一个非常复杂的构建,它涉及许多静态和共享库,使用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
围绕对象和库应该使它无关紧要 - 无论如何,我想我已经得到了订购权。那是怎么回事?