【问题标题】:Compiling C++ code on a system with two different Boost versions installed在安装了两个不同 Boost 版本的系统上编译 C++ 代码
【发布时间】:2016-06-03 09:34:23
【问题描述】:

我正在尝试在 Ubuntu 系统上编译,其中我安装了两个不同版本的 boost/usr/lib/ 中的 1.46.11.61.0 /usr/local/lib/

我已经说过 1.61.0 给我带来了一些编译问题,但是当我有更多时间时,我宁愿不删除它来研究问题。我想我可以将makefile 引用到1.46.1,使用-I"/usr/include/boost" 获取1.46.1 源,然后使用-L /usr/lib 获取库。但仍然无法正常工作。

我怀疑-lboost_filesystem -lboost_system -lboost_date_time 的用法在某种程度上引用了 1.61.0,即使与 -L /usr/lib 一起使用(它指向 1.46.1 )。但是我一直无法找到有关链接器的此编译标志的信息。

如何确保那些-l 被引用到我想要的Boost 版本?

这是makefile 在链接时所做的示例(失败的部分):

Invoking: Cygwin C++ Linker
g++  -O0 -g3 -Wall -Wextra -o"../bin/MY_APP.exe" ../bin/objs/main.o ../bin/objs/FileLoad.o ../bin/objs/DatabaseLoad.o -L /usr/lib/mysql -L /usr/lib -lmysqlclient -lboost_filesystem -lboost_system -lboost_date_time  

【问题讨论】:

  • 在CMake中,你可以参考这个thick

标签: c++ boost makefile


【解决方案1】:

您可以通过让链接器承认它实际使用了哪些库来确认或反驳您的怀疑。将选项 -Wl,--verbose 添加到您的 g++ 链接命令行(在 makefile 中或直接尝试)。然后,链接器将吐出与它试图链接的所有内容匹配的确切文件,包括您的 boost 库。

如果事实证明它实际上链接了错误的版本,它还可以通过指定链接器在定位给定库时尝试的路径的确切顺序,为您提供一个线索,以了解确切的原因。如果您需要更改某些选项(例如,-L...-l... 选项的顺序和/或内容),这应该会给您一些弹药

如果失败,您也可以使用选项-l:/path/to/exact/libboost_whatever.so。这将强制使用给定版本的链接器。不过我还是会试试这个。

【讨论】:

  • 他们似乎指向了正确的版本,所以我的问题一定出在其他地方。尽管如此,这就是我想知道的全部。谢谢你的智慧
猜你喜欢
  • 1970-01-01
  • 2018-05-09
  • 1970-01-01
  • 2023-02-21
  • 2013-02-19
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
相关资源
最近更新 更多