在安装了两个不同 Boost 版本的系统上编译C++代码
Compiling C++ code on a system with two different Boost versions installed
我正在尝试在 Ubuntu 系统上编译,其中我安装了两个不同版本的boost
:/usr/lib/
中的 1.46.1 和/usr/local/lib/
中的 1.61.0。
我已经说过 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
您可以通过让链接器承认它实际使用的库来确认或反驳您的怀疑。将选项 -Wl,--verbose
添加到g++
链接命令行(在生成文件中或直接尝试此操作)。然后,链接器将吐出与它尝试链接的所有内容(包括您的 boost 库)匹配的确切文件。
如果事实证明它实际上链接了错误的版本,它还通过指定链接器在查找给定库时尝试的确切路径顺序来为您提供确切原因的线索。如果您需要更改某些选项(例如,订购和/或-L...
和-l...
选项的内容),这应该会给您一些弹药
如果此操作失败,您还可以使用选项 -l:/path/to/exact/libboost_whatever.so
。这将强制使用给定版本的链接器。不过我会最后尝试一下。
- FindPackageHandleStandardArgs.cmake:137 的 CMake 错误(消息):找不到 Boost (缺少:正则表达式)(找到合适的版本"1.72.0",
- yum :在 CentOS 上使用 Boost 1.69 而不是默认 (1.53) 版本
- C++,自使用boost和std::chrono的纪元以来的时间?为什么 Boost 版本慢 10 倍?
- 如何创建一个版本的 boost::range::transform,该版本具有用于捕获上下文的额外参数
- BOOST :: MUTEX版本与调试构建
- Xcode(版本9.2(9C40B)):试图包括Boost时C 语义和链接器问题
- 为什么Boost Serialization使用的类版本限制为8位
- boost::v1.59 和 v1.60 之间的序列化存档版本
- 如何链接到与 Linux 中不同版本的 boost 链接的共享库
- 最新版本的 Boost asio 库中缺少方法的替代方法
- 在Mac上安装使用Homebrew的特定版本的Boost
- Boost bjam 不会将编译器版本放在文件名中
- 切换到更高的 Boost 版本 1.6.1 时出现编译错误
- Visual Studio 2017,Boost和Cmake的版本号
- CMake错误:导入的目标不适用于Boost版本106300
- BOOST BINOMIAL_COFEFIED的日志版本
- cmake链接了boost/cmake的多个版本的源文件的单独汇编
- 如何根据Boost版本有选择性地包括Boost标头
- 安装 Python3.6 版本的 Boost-Python3
- Boost github版本不包含子模块