解决BUG
问题描述:
linux下编译出现:undefined reference to 'std::thread::_State::~_State()@GLIBCXX_3.4.22
如下:
原因分析:
原因:gcc动态链接库版本较低
解决方案:
方案1:直接升级gcc
升级方法:
1、添加软件源:
sudo add-apt-repository ppa:ubuntu-toolchain-r/test
注意:但是有些系统版本一执行就报错了:
add-apt-repository: command not found
解决办法如下:
apt-get update
apt-get install python-software-properties
apt-get install apt-file
apt-file update
apt-get install software-properties-common
执行结束后,再重新执行sudo add-apt-repository ppa:ubuntu- toolchain-r/test
当出现Press [ENTER] to continue or ctrl-c to cancel adding it 时,按一 下回车键
2、更新
sudo apt-get update
3、选择安装版本,例gcc-7:
sudo apt-get install gcc-7 g++-7
4、安装完成,更新链接:
update-alternatives --install /usr/bin/gcc gcc /usr/bin/gcc-7 70
–slave /usr/bin/g++ g++ /usr/bin/g++-7
–slave /usr/bin/gcc-ar gcc-ar /usr/bin/gcc-ar-7
–slave /usr/bin/gcc-nm gcc-nm /usr/bin/gcc-nm-7
–slave /usr/bin/gcc-ranlib gcc-ranlib /usr/bin/gcc-ranlib-7
方案2:升级gcc动态链接库
使用命令:strings /usr/lib/x86_64-linux-gnu/libstdc++.so.6 | grep GLIBCXX
可以看到此处缺少GLIBCXX_3.4.22
注:下载文件libstdc++.so.6.0.22,或者更高版本,此处使用版本为:6.0.28
1、移动文件到/usr/lib/x86_64-linux-gnu/文件夹下
sudo mv libstdc++.so.6.0.28 /usr/lib/x86_64-linux-gun/
查看文件:ls -l:
可以看到此时版本为6.2.21
2、删除链接文件:
sudo rm -r libstdc++.so.6
3、重新建立链接:
sudo ln -s libstdc++.so.6.0.28 libstdc++.so.6
再次查看文件:ls -l
此时版本为:6.0.28
使用命令:strings /usr/lib/x86_64-linux-gnu/libstdc++.so.6 | grep GLIBCXX
此时便出现了GLIBCXX_3.4.22