我想用boost 1.69编译(c++cmake)代码。我使用的是centos 7。
在使用.NET Framework 2.0后,代码可以正常编译,但使用默认的1.53版本。
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
yum安装的boost 1. 69也是可用的。所以我可以这样做。
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,删除了usrincludeboost文件夹和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 "了)
在这一点上,我相信我也可以通过手动创建usrincludeboost和lib64libboost_*.so的符号链接来让我的工作空间编译,但这也不像是干净的事情。
(注:我创建了指向usrincludeboost64boost的符号链接usrincludeboost,确实cmake不再抱怨BOOST_INCLUDE_DIR,但由于我没有为库创建符号链接,cmake仍然抱怨这些)。
有没有比手动创建符号链接更简单的方法?
编辑 : 我确实为编译器抱怨的所有与boost相关的库手动创建了符号链接,而且我可以确认这有效。
所以很明显 BOOST_INCLUDE_DIR
你可以用它来控制增压头的位置,所以为什么不直接用
cmake -DBOOST_INCLUDEDIR=/usr/include/boost169 \
-DBOOST_LIBRARYDIR=/usr/lib64/boost169 \
...