最近因为项目需要,要把一套代码从Linux3.4内核移动到2.6内核下运行。在源码编译的时候就出现了各种情况了,其中就遇到了问题:
undefined reference to `__sync_val_compare_and_swap_8'
分析之后,发现该问题的出现是由于2.6内核版本的ubuntu,编译器版本过低。
解决问题:升级gcc
sudo add-apt-repository ppa:ubuntu-toolchain-r/test
sudo apt-get update
sudo apt-get install gcc-4.7
sudo apt-get install g++-4.7
安装过程可能会提示:
下列软件包有未满足的依赖关系:
gcc-4.7: 依赖: gcc-4.7-base (= 4.7.3-1ubuntu1~10.04.2) 但是它将不会被安装
依赖: cpp-4.7 (= 4.7.3-1ubuntu1~10.04.2) 但是它将不会被安装
依赖: libgcc-4.7-dev (= 4.7.3-1ubuntu1~10.04.2) 但是它将不会被安装
此时需要先安装以上的依赖文件包,如gcc-4.7-base,这里稍微等待一段时间。
sudo apt-get install gcc-4.7-base
安装完成之后,可以查看gcc版本
gcc --version
若显示版本依然是旧版本号,并没有把4.7版本设置为默认的gcc的链接文件,则进入/usr/bin/
把gcc 这个文件删除,建立链接到gcc-4.7(g++类似)
cd /usr/bin
sudo rm gcc
sudo ln -s gcc-4.7 gcc