【问题标题】:Undefined boost reference despite correct linking尽管链接正确,但未定义的升压参考
【发布时间】:2019-02-19 14:53:31
【问题描述】:

我发现了很多类似的问题,但我无法为我应用任何给定的解决方案。几个月前,我在一个项目中使用了 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

我希望有人可以在这里帮助我,并且我不是太愚蠢,无法在另一个线程中看到解决方案。

您好!

【问题讨论】:

标签: c++ boost


【解决方案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 中链接错误的库。

【讨论】:

  • 感谢您的回答。不幸的是,更改顺序或使用分组技术不起作用,错误仍然存​​在。任何想法,还有什么可能导致它?
  • 再次感谢您的努力。虽然这听起来像是一个合理的解决方案,但直接链接库并不能解决出现的错误。正如我所说,同样的命令不久前工作得很好。我并没有真正改变我的系统中的任何东西,但是那个方向的东西会导致它吗?
猜你喜欢
  • 2020-11-06
  • 1970-01-01
  • 1970-01-01
  • 2020-11-28
  • 2012-11-25
  • 2019-07-24
  • 2016-01-29
  • 1970-01-01
  • 1970-01-01
相关资源
最近更新 更多