【发布时间】:2020-09-28 11:52:38
【问题描述】:
我想使用 boost 1.69 编译 (c++/cmake) 代码。我在 centos 7 上。
之后:
sudo yum install boost-devel.x86.64
代码编译良好,但使用默认版本 1.53。
如果我查看 /lib64 中安装的库,我会看到例如:
>> ls -al /lib64/ | grep boost_timer
lrwxrwxrwx. 1 root root 27 Jun 9 11:50 libboost_timer-mt.so -> libboost_timer-mt.so.1.53.0
-rwxr-xr-x. 1 root root 19848 Apr 1 04:26 libboost_timer-mt.so.1.53.0
boost 1.69 的 yum 安装也可用。所以我可以这样做:
sudo yum install boost169-devel.x86_64
例如更新 /lib64/ 的内容
>> ls -al /lib64/ | grep boost_timer
lrwxrwxrwx. 1 root root 27 Jun 9 11:50 libboost_timer-mt.so -> libboost_timer-mt.so.1.53.0
-rwxr-xr-x. 1 root root 19848 Apr 1 04:26 libboost_timer-mt.so.1.53.0
lrwxrwxrwx. 1 root root 24 Jun 9 11:50 libboost_timer.so -> libboost_timer.so.1.53.0
-rwxr-xr-x. 1 root root 19848 Apr 1 04:26 libboost_timer.so.1.53.0
-rwxr-xr-x. 1 root root 24104 Apr 23 2019 libboost_timer.so.1.69.0
还有:
>> ls /usr/include/ | grep boost
boost
boost169
此时我的工作区仍在编译,但仍在使用 1.53。
我希望我的工作区使用 1.69 进行编译。我可以通过搞砸来实现这一点 FindBoost.cmake 但这感觉不像是干净的事情。
我还尝试(yum)删除了 boost-dev.x86-64,它删除了文件夹 /usr/include/boost 和 /lib64 中的相关 so 文件,例如:
>> ls -al /lib64/ | grep boost_timer
libboost_timer-mt.so.1.53.0
libboost_timer.so.1.53.0
libboost_timer.so.1.69.0
(注意不再有“libboost_timer-mt.so”)
在这一点上,我相信我也可以通过手动创建符号链接 /usr/include/boost 和 /lib64/libboost_*.so 来编译我的工作区,但这也不像是一件干净的事情
(注意:我创建了指向 /usr/include/boost64/boost 的符号链接 /usr/include/boost,并且确实 cmake 停止抱怨 BOOST_INCLUDE_DIR,但是因为我没有为库创建符号链接,所以 cmake仍然抱怨这些)。
是否有更简洁的替代方式来手动创建符号链接?
edit:我确实为编译器抱怨的所有与 boost 相关的库创建了手动符号链接,我可以确认这有效。
【问题讨论】:
-
你为什么不直接从 boost.org 获取安装 1.73?
-
@user14717 因为使用系统提供的库是在 CentOS 的企业操作系统上运行的方式。使用源安装的库进行编译不是安全的事情,即使它是较新的。系统提供的库将通过包更新进行安全反向移植,源安装则不会。
标签: c++ boost cmake centos yum