尽管链接正确,但不确定的增强参考

时间:2019-02-19 14:53:32

标签: c++ boost

我发现了很多类似的问题,但是我无法为我应用任何给定的解决方案。几个月前,我使用Boost库进行了一个项目。我只是在命令行中进行了编译,如boost网站所述。

g++ -I pathToBoost file.cpp -o file -lboost_system -lboost_filesystem

还完成了到boost_system和boost_filesystem的两个必需链接。效果很好,但是现在当我再次尝试编译它时突然出现错误。

/usr/bin/ld: /tmp/ccM2BzEo.o: in function `boost::system::generic_category()':
file.cpp:(.text._ZN5boost6system16generic_categoryEv[_ZN5boost6system16generic_categoryEv]+0x7): 

undefined reference to `boost::system::detail::generic_category_instance'

好吧,在我看来,链接boost_system库时出错。既然以前也可以使用,那么编译器可能会出现问题吗?

我用过

Boost 1.68.0
g++ (GCC) 8.2.1
ManjaroLinux 18.0.3

我希望有人能在这里为我提供帮助,而且我不只是愚蠢到在另一个线程中看到解决方案。

问候!

1 个答案:

答案 0 :(得分:1)

链接器命令行中库的顺序很重要。 boost_filesystem取决于boost_system,因此解决方法:

-lboost_filesystem -lboost_system

或者,您可以用--start-group--end-group包围库列表,以使链接程序多次重新扫描库,直到它失败或解析所有符号为止,从而没有特定的顺序命令行中的库是必需的。但是,链接可能需要更长的时间。例如:

g++ -I pathToBoost file.cpp -o file -Wl,--start-group -lboost_system -lboost_filesystem -Wl,--end-group

由于您指定了-I pathToBoost,因此您还需要指定-L<path-to-boost-libs> -Wl,-rpath=<path-to-boost-libs>。否则,它将使用来自pathToBoost的boost的一个版本的标头,但会通过系统boost链接错误的库。