centos7安装gcc7.2.0小记:
安装gcc7.2.0 需要先安装GMP 4.2+, MPFR 2.4.0+ and MPC 0.8.0+. 这些我都是自定义安装的,需要引用库的时候直接将include目录加入C_INCLUDE_PATH,lib目录加入LIBRARY_PATH即可,如若不加也可以使用configure的–with-gmp等参数
当安装好了自定义的依赖库,安装gcc7.2.0时,通过将所有依赖的lib加入LIBRARY_PATH;configure不会报错但make还是会报错:
[root@localhost soft]# export C_INCLUDE_PATH=/usr/include:/share/soft/gmp-6.1.2/include:/share/soft/mpfr-3.1.6/include:/share/soft/mpc-1.0.3/include [root@localhost soft]# export LIBRARY_PATH=/lib:/usr/lib:/share/soft/gmp-6.1.2/lib:/share/soft/mpfr-3.1.6/lib:/share/soft/mpc-1.0.3/lib [root@localhost soft]# export LD_LIBRARY_PATH=/lib:/usr/lib:/share/soft/gmp-6.1.2/lib:/share/soft/mpfr-3.1.6/lib:/share/soft/mpc-1.0.3/lib #这个是多余的,可以不用加 [root@localhost soft]# ../gcc-7.2.0/configure --prefix=/share/soft/gcc-7.2.0/ --enable-threads=posix --disable-multilib ...没问题... [root@localhost soft]# make g++ -std=gnu++98 -c -g -DIN_GCC -fno-exceptions -fno-rtti -fasynchronous-unwind-tables -W -Wall -Wno-narrowing -Wwrite-strings -Wcast-qual -Wno-format -Wmissing-format-attribute -Woverloaded-virtual -pedantic -Wno-long-long -Wno-variadic-macros -Wno-overlength-strings -fno-common -DHAVE_CONFIG_H -DGENERATOR_FILE -fno-PIE -I. -Ibuild -I../../gcc-7.2.0/gcc -I../../gcc-7.2.0/gcc/build -I../../gcc-7.2.0/gcc/../include -I../../gcc-7.2.0/gcc/../libcpp/include \ -o build/genmddeps.o ../../gcc-7.2.0/gcc/genmddeps.c In file included from ./bconfig.h:3:0, from ../../gcc-7.2.0/gcc/genmddeps.c:18: ./auto-host.h:2357:16: 错误:没有声明任何东西 [-fpermissive] #define rlim_t long ^ In file included from ../../gcc-7.2.0/gcc/genmddeps.c:19:0: ../../gcc-7.2.0/gcc/system.h:488:23: 错误:C 函数‘void* sbrk(int)’的声明 extern void *sbrk (int); ^ In file included from ../../gcc-7.2.0/gcc/system.h:294:0, from ../../gcc-7.2.0/gcc/genmddeps.c:19: /usr/include/unistd.h:1065:14: 错误:与此处早先的声明‘void* sbrk(intptr_t)’冲突 extern void *sbrk (intptr_t __delta) __THROW; ...... make[3]: *** [build/genmddeps.o] 错误 1 make[3]: 离开目录“/share/soft_backup/gcc-7.2.0_build2/gcc” make[2]: *** [all-stage1-gcc] 错误 2 make[2]: 离开目录“/share/soft_backup/gcc-7.2.0_build2” make[1]: *** [stage1-bubble] 错误 2 make[1]: 离开目录“/share/soft_backup/gcc-7.2.0_build2” make: *** [all] 错误 2
解决办法:直接使用configure的 –with-gmp, –with-mpfr –with-mpc 选项就可以
[root@localhost gcc-7.2.0_build]# ../gcc-7.2.0/configure –prefix=/share/soft/gcc-7.2.0/ –enable-threads=posix –disable-multilib –with-gmp=/share/soft/gmp-6.1.2 –with-mpfr=/share/soft/mpfr-3.1.6 –with-mpc=/share/soft/mpc-1.0.3
也有人提过这个问题:https://www.spinics.net/lists/gcchelp/msg45436.html
编译好后,如果修改默认g++ gcc版本,以及gcc默认动态库的指定:
a. gcc、g++、gcj的设置
要想使用GCC 7.2.0的gcc等命令,简单的方法就是把它的路径/share/soft/gcc-7.2.0/bin放在环境变量PATH中。我不用这种方式,而是用符号连接的方式实现,这样做的好处是我仍然可以使用系统上原来的旧版本的GCC编译器。
首先,查看原来的gcc所在的路径:
% which gcc
在我的系统上,上述命令显示:/usr/bin/gcc。因此,原来的gcc命令在/usr/bin目录下。我们可以把GCC 4.1.2中的gcc、g++、gcj等命令在/usr/bin目录下分别做一个符号连接:
% cd /usr/bin
% ln -s /share/soft/gcc-7.2.0/bin/gcc gcc720
% ln -s /share/soft/gcc-7.2.0/bin/g++ g++720
% ln -s /share/soft/gcc-7.2.0/bin/gcj gcj720
这样,就可以分别使用gcc720、g++720、gcj720来调用GCC 7.2.0的gcc、g++、gcj完成对C、C++、JAVA程序的编译了。同时,仍然能够使用旧版本的GCC编译器中的gcc、g++等命令。
b. 库路径的设置 如不设置好动态库路径有些程序就会报错:http://yangl.net/2018/05/15/gcc_add_lib/
将${destdir}/lib路径添加到环境变量LD_LIBRARY_PATH中,例如,如果GCC 7.2.0安装在/share/soft/gcc-7.2.0目录下,在RH Linux下可以直接在命令行上执行
% export LD_LIBRARY_PATH=/share/soft/gcc-7.2.0/lib64
最好添加到系统的配置文件中,这样就不必要每次都设置这个环境变量了,在文件$HOME/.bash_profile中添加下面两句:
export LD_LIBRARY_PATH=/share/soft/gcc-7.2.0/lib64:$LD_LIBRARY_PATH
重启系统设置生效,或者执行命令
% source $HOME/.bash_profile
生效!
尊重他人劳动成果,转载请注明出处:Bluesky's blog » centos7自定义安装gcc7.2.0