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

siotufzp  于 2022-11-07  发布在  其他
关注(0)|答案(2)|浏览(412)

我想用boost 1.69编译(c++/cmake)代码。我在centos 7上。
之后:

sudo yum install boost-devel.x86.64

该代码编译良好,但使用的是默认版本1. 53。
如果我查看安装在/lib 64中的库,我会看到例如:

>> 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

例如更新/lib 64/

>> 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和/lib 64中的相关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

(note不再有“libboost_timer-mt. so”)
此时,我相信我还可以通过手动创建符号链接/usr/include/boost和/lib 64/libboost_* 来编译我的工作区。所以,但这也不像是一件干净的事情
(note:我创建了指向/usr/include/boost 64/boost的符号链接/usr/include/boost,并且cmake确实停止了对BOOST_INCLUDE_DIR的抱怨,但是因为我没有为库创建符号链接,所以cmake仍然抱怨这些)。
是否有一种更干净的替代方法来手动创建符号链接?
编辑:我确实为编译器抱怨的所有与boost相关的库手动创建了符号链接,我可以确认这是有效的。

abithluo

abithluo1#

显然,您可以使用BOOST_INCLUDE_DIR来控制在何处提升标题,因此,为什么不

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

ruyhziif2#

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

相关问题