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_INCLUDEDIR
和 BOOST_LIBRARYDIR
设置为环境变量。 FindBoost.cmake
显式地在环境中查找这些变量(CMake 默认情况下不会这样做)。因此,您可以在某个地方全局 export BOOST_INCLUDEDIR=/usr/include/boost169
和 export BOOST_LIBRARYDIR=/usr/lib64/boost169
,或者您也可以使用例如 BOOST_INCLUDEDIR=/usr/include/boost169 BOOST_LIBRARYDIR=/usr/lib64/boost169 ./mybuild.sh
包装命令调用(假设 mybuild.sh
最终调用 CMake 或处理这些环境变量本身,当然)。
我想使用 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_INCLUDEDIR
和 BOOST_LIBRARYDIR
设置为环境变量。 FindBoost.cmake
显式地在环境中查找这些变量(CMake 默认情况下不会这样做)。因此,您可以在某个地方全局 export BOOST_INCLUDEDIR=/usr/include/boost169
和 export BOOST_LIBRARYDIR=/usr/lib64/boost169
,或者您也可以使用例如 BOOST_INCLUDEDIR=/usr/include/boost169 BOOST_LIBRARYDIR=/usr/lib64/boost169 ./mybuild.sh
包装命令调用(假设 mybuild.sh
最终调用 CMake 或处理这些环境变量本身,当然)。