更改Ubuntu gcc、g++默认编译器版本
由于要编译mtcnn,(caffe)c++版,cmake 时,需要降级。
首先,看一下你的Ubuntu都装了哪些版本的gcc 用命令:
ls /usr/bin/gcc* -l
显示如下:
lrwxrwxrwx 1 root root 14 8月 5 17:35 /usr/bin/gcc -> /usr/bin/gcc-5
-rwxr-xr-x 1 root root 776344 1月 26 2016 /usr/bin/gcc-4.8
-rwxr-xr-x 1 root root 838008 9月 5 2016 /usr/bin/gcc-4.9
-rwxr-xr-x 1 root root 915736 6月 22 07:04 /usr/bin/gcc-5
lrwxrwxrwx 1 root root 8 2月 11 2016 /usr/bin/gcc-ar -> gcc-ar-5
-rwxr-xr-x 1 root root 27032 1月 26 2016 /usr/bin/gcc-ar-4.8
-rwxr-xr-x 1 root root 27032 9月 5 2016 /usr/bin/gcc-ar-4.9
-rwxr-xr-x 1 root root 31136 6月 22 07:04 /usr/bin/gcc-ar-5
lrwxrwxrwx 1 root root 8 2月 11 2016 /usr/bin/gcc-nm -> gcc-nm-5
-rwxr-xr-x 1 root root 27032 1月 26 2016 /usr/bin/gcc-nm-4.8
-rwxr-xr-x 1 root root 27032 9月 5 2016 /usr/bin/gcc-nm-4.9
-rwxr-xr-x 1 root root 31136 6月 22 07:04 /usr/bin/gcc-nm-5
lrwxrwxrwx 1 root root 12 2月 11 2016 /usr/bin/gcc-ranlib -> gcc-ranlib-5
-rwxr-xr-x 1 root root 27032 1月 26 2016 /usr/bin/gcc-ranlib-4.8
-rwxr-xr-x 1 root root 27032 9月 5 2016 /usr/bin/gcc-ranlib-4.9
-rwxr-xr-x 1 root root 31136 6月 22 07:04 /usr/bin/gcc-ranlib-5
由上面显示可以看出默认安装的是gcc-5,现在来改成gcc-4.9
删除gcc-5的软连接文件/usr/bin/gcc。(只是删除软连接)
命令:
sudo rm /usr/bin/gcc
然后建一个软连接,指向gcc-4.9。
sudo ln -s /usr/bin/gcc-4.9 /usr/bin/gcc
ok了,现在用命令:gcc –version 显示如下:
gcc (Ubuntu 4.9.2-6ubuntu1~16.04.10) 5.4.0 20160609
可是 make 时若出现如下错误:
CXX/LD -o .build_release/tools/upgrade_solver_proto_text.bin
.build_release/tools/extract_features.o: In function `*std::string* google::***MakeCheckOpString****<int, int>(int const&, int const&, char const*)':
extract_features.cpp:(.text._ZN6google17MakeCheckOpStringIiiEEPSsRKT_RKT0_PKc[_ZN6google17MakeCheckOpStringIiiEEPSsRKT_RKT0_PKc]+0x50): undefined reference to `google::base::CheckOpMessageBuilder::NewString()'
.build_release/tools/extract_features.o: In function `std::string* google::MakeCheckOpString<unsigned long, unsigned long>(unsigned long const&, unsigned long const&, char const*)':
extract_features.cpp:(.text._ZN6google17MakeCheckOpStringImmEEPSsRKT_RKT0_PKc[_ZN6google17MakeCheckOpStringImmEEPSsRKT_RKT0_PKc]+0x51): undefined reference to `google::base::CheckOpMessageBuilder::NewString()'
此时改回原来的编译器版本gcc5就能顺利编译通过。