编译Caffe-SSD时遇到以下错误:
.build_release/lib/libcaffe.so: undefined reference to `boost::re_detail_106501::cpp_regex_traits_implementation<char>::transform(char const*, char const*) const'
.build_release/lib/libcaffe.so: undefined reference to `boost::re_detail_106501::cpp_regex_traits_implementation<char>::transform_primary(char const*, char const*) const'
collect2: error: ld returned 1 exit status
······
解决方法:
一般这种情况是由于环境中缺少boost包导致的,虽然在安装依赖包的时候可能安装,但还是重新对这个包编译以下比较好。刚开始的时候我也安装依赖包了,为了方便就没有重新编译,结果这个错误尝试了很多方法,一直无法解决。最后在即将崩溃的时候尝试了重新编译boost,这个问题竟然被解决了!!
1. boost安装包下载解压
boost安装包下载安装地址:https://www.boost.org/
我下载的是boost_1_68_0_rc1.zip版本,读者也可以自行选择版本,最后是1.60以上。
对下载的安装包进行解压:
unzip boost_1_68_0_rc1.zip
2. 设置编译器和所选库
进如解压目录:
cd boost_1_68_0
运行bootstrap.sh脚本并设置相关参数.
./bootstrap.sh --with-libraries=all --with-toolset=gcc
- –with-libraries:指编译哪些boost库,all的话就是全部编译,只想编译部分库的话就把库的名称写上,之间用 , 号分隔即可,这里建议选择all
- –with-toolset:指编译时使用哪种编译器,Ubuntu下使用gcc即可,如果系统中安装了多个版本的gcc,在这里可以指定gcc的版本,比如–with-toolset=gcc-5.5
命令执行完成后看到显示如下即为成功:
Building Boost.Build engine with toolset gcc... tools/build/src/engine/bin.linuxx86_64/b2
Detecting Python version... 2.6
Detecting Python root... /usr
Unicode/ICU support for Boost.Regex?... not found.
Generating Boost.Build configuration in project-config.jam...
Bootstrapping is done. To build, run:
./b2
To adjust configuration, edit 'project-config.jam'.
Further information:
- Command line help:
./b2 --help
- Getting started guide:
http://www.boost.org/more/getting_started/unix-variants.html
- Boost.Build documentation:
http://www.boost.org/build/doc/html/index.html
3. 编译
在终端执行:
./b2 toolset=gcc
编译过程会持续好一会,可以喝杯茶~
编译成功会有以下提示:
...updated XXX targets... //XXX指一个数字
4.安装
在终端执行:
./b2 install --prefix=/usr
- –prefix=/usr:用来指定boost的安装目录,不加此参数的话默认的头文件在/usr/local/include/boost目录下,库文件在/usr/local/lib/目录下。这里把安装目录指定为–prefix=/usr则boost会直接安装到系统头文件目录和库文件目录下,可以省略配置环境变量。
安装完成会有以下界面:
...updated XXXX targets... //XXX指一个数字
使安装的boost库立即生效.
ldconfig //更新系统的动态链接库
此时再回去执行以下步骤:
sudo make clean
sudo make all -j32 //这一步也许会出现其他错误,但是此错误解决
//如果出现其他错误,可以多make clean 和make all 几次,再不行可以查看其他解决方法。
至此,boost库编译安装完成!
参考博客:Linux编译和安装boost库