ubuntu11.10 gcc 4.5.3 安装 (CUDA4.1中要求低版本的GCC for 32bit OS)
everything is here : http://gcc.gnu.org/install/build.html
首先,你得记得去把 gmp -> mpfr -> mpc 这些个安装(注意安装顺序)。。 下载地址有官网或者在gnu.org上下载,例如
ftp://gcc.gnu.org/pub/gcc/infrastructure/
这三个依赖软件的安装,最简单的步骤就是
$./configure
$make
$make check <=== very important
$sudo make install
其中,对于GMP的安装,其默认安装路径为 /usr/local/lib ,而非之前的 /usr/lib,所以在安装后续的MPFR时,其按照默认的搜索路径进行搜索时就会出问题,导致其 make check 出错。
缺少什么包 就安装什么。。同时仔细阅读官网提供的手册。。
之后,关键是那几个configuration :
--prefix=
/usr/local/gcc-4.5.3 or--prefix=
/usr/lib/gcc-4.5.3- --enable-threads=posix
- --enable-languages=c,c++
--disable-stage1-checking
之后就是编译 当前目录为 obj_gcc_4.5.3, source file set is ../gcc-4.5.3,则 具体执行时,就
$../gcc-4.5.3/configure --prefix=/usr/local/gcc-4.5.3 --enable-threads=posix --enable-languages=c,c++ --disable-stage1-checking
$make //build
编译过程中出错,报错是fatal error: bits/predefs.h:没有那个文件或目录compilation terminated. ,需要安装包
multilib, 命令为 $sudo apt-get install gcc-multilib
编译过程中缺少gnu/stubs-32.h:没有那个文件或目录, 需要安装g++-multilib,命令为 $sudo apt-get install g++-multilib, 开始以为如此可以解决问题,但是实际没有,stubs-32.h 存在于/usr/include/i386-linux-gnu/gnu,而编译中寻址则为 /usr/include/gnu 干脆就拷贝过去。。
再次出现一个问题,ld找不到 crto*.o文件, 建立一个软链接: sudo ln -s i386-linux-gnu/crt*.o . (dir=/usr/lib)
$make check //test
$make install //install
$make clean
- 在安装完毕后,需要去修改命令搜索路径上的所欲链接的文件。
- 修改原来的链接,是个简单的选项。 例如,
- 在目录/usr/bin 下,原来是 gcc-> gcc-4.6 g++ -> g++-4.6
- 现在需要做的就是 修改为
- gcc ->/usr/local/gcc-4.5.3/bin/gcc
- g++ ->/usr/local/gcc-4.5.3/bin/g++
- ok, enjoy gcc-4.5.3 now !!
- 再说一点,之后安装CUDA时遇到种种问题,例如GCC版本依然过高,或者是驱动版本太低,或者是安装CUDA SDK进行编译时,报出经典错误:/usr/bin/ld: cannot find -lcuda , 其实 libcuda.so 在目录 /usr/lib/nvidia-current-updates/libcuda.so.295.20 , 在目录/usr/lib 下建立一个新的软链接链接至此即可。。
- $cd /usr/lib
- $sudo ln -s /usr/lib/nvidia-current-updates/libcuda.so.295.20 libcuda.so
- 费了老大的劲,GCC降低版本,驱动提升版本,同时干掉各种编译问题,好吧,CUDA SDK当中的几十个例程全部编译成功,看着一大片的二进制文件,很开心,然后运行时 傻了眼: 我猛然发现自己的 NVIDIA GPU是 GeForce 7100 GS 属于 GeForce 7 Series,而CUDA MANNUAL 或者维基百科中查的信息均说, CUDA最低是从 GeForce 8 Series 开始支持的。。。我勒个去。。。肏。。。。