yum:在 centos 上使用 boost 1.69 而不是默认 (1.53) 版本

yum : using boost 1.69 instead of default (1.53) version on centos

我想使用 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")

在这一点上,我相信我也可以通过手动创建符号 links /usr/include/boost 和 /lib64/libboost_*.so 来编译我的工作区,但这也不像干净的事情要做

(注意:我创建了符号 link /usr/include/boost 指向 /usr/include/boost64/boost,实际上 cmake 停止抱怨 BOOST_INCLUDE_DIR,但因为我没有为库创建符号 links,cmake 仍然抱怨这些。

是否有更简洁的替代方法来手动创建符号 links?


edit:我确实为编译器抱怨的所有 boost 相关库手动创建了符号 links,我可以确认这有效。

所以很明显 BOOST_INCLUDE_DIR 可以用来控制提升 headers 的位置,那么为什么不只是

cmake -DBOOST_INCLUDEDIR=/usr/include/boost169 \
  -DBOOST_LIBRARYDIR=/usr/lib64/boost169 \
  ...

最接近设置 CMake 默认值的方法是将 BOOST_INCLUDEDIRBOOST_LIBRARYDIR 设置为环境变量。 FindBoost.cmake 显式地在环境中查找这些变量(CMake 默认情况下不会这样做)。因此,您可以在某个地方全局 export BOOST_INCLUDEDIR=/usr/include/boost169export BOOST_LIBRARYDIR=/usr/lib64/boost169,或者您也可以使用例如 BOOST_INCLUDEDIR=/usr/include/boost169 BOOST_LIBRARYDIR=/usr/lib64/boost169 ./mybuild.sh 包装命令调用(假设 mybuild.sh 最终调用 CMake 或处理这些环境变量本身,当然)。