c++ - 告诉 CMake 在自定义文件夹中链接到 Boost
问题描述
我正在尝试在自定义目录中安装 boost。我做了:
cd boost_dir
./bootstrap.sh --prefix=/custom_dir
./b2
现在我想做的是告诉 CMake 指向那个库。为此,我补充说:
set(BOOST_ROOT "/custom_dir")
FIND_PACKAGE(Boost COMPONENTS program_options REQUIRED)
INCLUDE_DIRECTORIES(${Boost_INCLUDE_DIRS})
TARGET_LINK_LIBRARIES(myProject ${Boost_LIBRARIES})
CMake 显然在该目录中找到了提升:
cmake .
-- Found Boost: /custom_dir (found suitable version "1.66.0", minimum required is "1.66") found components: program_options -- Configuring done
-- Generating done
-- Build files have been written to: /my_project
但是,在编译时,我仍然得到:
undefined reference to `boost::program_options::options_description::options_description(std::string const&, unsigned int, unsigned int)'
一些答案指出,boost 必须使用与我正在使用的程序相同的编译器进行编译。但是,我不确定我上面所做的步骤是否真的编译了 boost 或者只是复制了未压缩的库?
此外,它是否使用路径解析的 g++ 或系统默认 /usr/bin 中的其他内容?原因是我没有 root 访问权限,并且还在自定义目录中安装了更新的 GCC。我已将我的 PATH 指向更新的 g++。
解决方案
事实证明,GCC 版本是正确的,但它只有在我使用静态链接编译 Boost 并告诉 CMake 静态链接时才有效。我尝试了动态链接(为我的目标应用程序编译 Boost 和设置 CMake),但由于某种原因它不起作用。
只需确保使用相同的 ABI 选项进行编译。
推荐阅读
- xcode - VideoCloudSamplePlayer iOS 示例应用程序视频再现
- c# - 使用 DbConnection 作为属性,只有 get 或 as 方法
- sql - 我有一个名为 authorsjson 的 JSON 列,其中包含 json 数据。我想找到名称以给定字符串开头的所有用户
- go - 按 mime 类型获取文件扩展名
- java - 不正确地显示图表
- android - 从活动中访问 viewpager 的片段
- django - 预测时出现张量流错误的 Keras
- ios - Swift - 如何在 if 语句之外访问常量
- powershell - 使用 Get-WmiObject 使用示例监视 CPU
- python - 如何将滚动添加到框架?