Footsteps on my way !
perl/linux/测序分析

centos7自定义安装gcc7.2.0

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

分享到:更多 ()

评论 抢沙发

  • 昵称 (必填)
  • 邮箱 (必填)
  • 网址