|
|
EDA365欢迎您登录!
您需要 登录 才可以下载或查看,没有帐号?注册
x
+ j- X2 k% u$ u+ \Linux下,有时经常需要使用不同版本gcc进行测试,尤其是有些大型程序,例如,如果第一次编译版本是gcc5.0,修改了其中一个文件,如果编译器改为gcc6.0,则运行时会出一些奇怪错误,甚至无法debug。我曾经遇到,类似一个问题,编译时不报错,运行时把其中一个int型数据0,当成了指针地址,报错segment fault,访问0地址错误。
6 @! R. u$ ^$ M, w ^+ t4 l* J N. Y3 F2 W$ `/ L8 @# l( m
为了实现单独用户使用特定编译器版本,可以利用Linux下环境变量初始化顺序的方式:, N+ |6 Y& O* l- `6 P) ^
- ]5 l+ G/ m9 p1 T) b
0. 查看当前gcc版本:
" K. i" Q0 ~. G
C' ^7 t+ l" {$ d# k- @" _$ gcc -v" w/ C# d o8 V+ B- a
7 l: f2 E* f# r& mUsing built-in specs.
! g- q3 R2 \/ W' P5 [COLLECT_GCC=gcc
/ J+ h4 ]! E9 F9 ]% b6 x) d1 ?COLLECT_LTO_WRAPPER=/usr/lib/gcc/x86_64-linux-gnu/5/lto-wrapper2 }# c3 m/ J' O: q( c; n
Target: x86_64-linux-gnu
! F) n' T( E, A U2 f+ e3 kConfigured with: ../src/configure -v --with-pkgversion='Ubuntu 5.4.0-6ubuntu1~16.04.5' --with-bugurl=file:///usr/share/doc/gcc-5/README.Bugs --enable-languages=c,ada,c++,java,go,d,fortran,objc,obj-c++ --prefix=/usr --program-suffix=-5 --enable-shared --enable-linker-build-id --libexecdir=/usr/lib --without-included-gettext --enable-threads=posix --libdir=/usr/lib --enable-nls --with-sysroot=/ --enable-clocale=gnu --enable-libstdcxx-debug --enable-libstdcxx-time=yes --with-default-libstdcxx-abi=new --enable-gnu-unique-object --disable-vtable-verify --enable-libmpx --enable-plugin --with-system-zlib --disable-browser-plugin --enable-java-awt=gtk --enable-gtk-cairo --with-java-home=/usr/lib/jvm/java-1.5.0-gcj-5-amd64/jre --enable-java-home --with-jvm-root-dir=/usr/lib/jvm/java-1.5.0-gcj-5-amd64 --with-jvm-jar-dir=/usr/lib/jvm-exports/java-1.5.0-gcj-5-amd64 --with-arch-directory=amd64 --with-ecj-jar=/usr/share/java/eclipse-ecj.jar --enable-objc-gc --enable-multiarch --disable-werror --with-arch-32=i686 --with-abi=m64 --with-multilib-list=m32,m64,mx32 --enable-multilib --with-tune=generic --enable-checking=release --build=x86_64-linux-gnu --host=x86_64-linux-gnu --target=x86_64-linux-gnu
$ Z0 K/ h2 g7 j$ T* j2 U% A; hThread model: posix, F& }1 \; E% i7 \
gcc version 5.4.0 20160609 (Ubuntu 5.4.0-6ubuntu1~16.04.5)
2 E9 a( I6 t7 R9 P
+ f- {0 P$ T0 M9 F3 U1. 安装一个特定版本的gcc,但是不要做默认gcc的修改,比如在ubuntu下,用命令行安装gcc:
* B9 o6 `9 |* _7 B( @( W) \; F. N: O9 _' b3 W, U3 n$ Z \
sudo add-apt-repository ppa:ubuntu-toolchain-r/test; p" i9 o8 c6 u7 o% _
" Z/ W* k2 m. Q# n sudo apt-get update
5 U* \# T- m% I. z. ~5 v' j, q( _: U6 I
sudo apt-get install gcc-6' F7 ]: [6 t% _
' ` i0 v8 t A3 H+ ^' y2. 在自己的home目录下,建立一个目录bin,然后做好软链接:. `3 M) C' A' _
! ]) B8 L; n* {; H% l# _. s% v$ mkdir bin; P* ^ C6 @! `" o: [
+ d! i+ c- U! D& Z! O. `! S. N$ ln -s /path/to/new/install/gcc ./bin/gcc
! @% \* z. b9 h. a: M) j! s
) K2 x/ D# T# f8 x/ v% _8 ]9 o/ A$ ln -s /path/to/new/install/g++ ./bin/g++% ~/ i- m+ p$ ~& y
, O5 V) }+ A+ l2 ], ]查看是否软链接成功:
, W1 w% ? M, Q: v7 Z$ m% H) U+ H% I& i: U% o
haha@test:~$ ls ./bin -l
2 V# F2 B: O( g* Atotal 0: L) T; j. q( B8 d6 M: S/ }4 V
lrwxrwxrwx 1 test 16 Jan 10 16:24 g++ -> /usr/bin/g++-4.8
/ y* _$ O* \% d# z, ^6 a! plrwxrwxrwx 1 test 16 Jan 10 16:24 gcc -> /usr/bin/gcc-4.8
& [7 P% i) w3 B+ @) z7 K6 z- ^, u! I* H
3. 修改自己home目录下的.bashrc,添加以下内容:
+ f8 I% V/ ~$ _/ h7 R o
# d e# W" [: hexport PATH=$PATH:~/bin #to use local gcc 4.8 not global gcc5.5 $ J8 f5 ?1 v) ~' ^
2 x8 L% Y+ D0 e& g: \2 U8 ~
4. 执行以下命令让修改生效:
2 P8 S0 M4 j$ T9 ~0 J/ d; |. o7 Y& P4 P. Z. s" m" N. d
$ source ~/.bashrc
+ V9 n; ]7 ^6 \7 i V. m9 ~4 m' s6 w$ s' k
5. 测试是否生效:
- G Z$ r# \; I+ r3 d
. c/ u/ k6 n% ^: D, w$ gcc -v; T# w: Y3 K$ N4 ]
$ |( R+ C* N. R/ _8 H7 k
Using built-in specs.) @ y" q. f9 r x# N% w
COLLECT_GCC=gcc
. }4 g" K7 Y3 [' KCOLLECT_LTO_WRAPPER=/usr/lib/gcc/x86_64-linux-gnu/4.8/lto-wrapper
6 c" V1 r! g. |5 P. qTarget: x86_64-linux-gnu
$ U! C, Y6 r+ Q. E; Y/ QConfigured with: ../src/configure -v --with-pkgversion='Ubuntu 4.8.5-4ubuntu2' --with-bugurl=file:///usr/share/doc/gcc-4.8/README.Bugs --enable-languages=c,c++,java,go,d,fortran,objc,obj-c++ --prefix=/usr --program-suffix=-4.8 --enable-shared --enable-linker-build-id --libexecdir=/usr/lib --without-included-gettext --enable-threads=posix --with-gxx-include-dir=/usr/include/c++/4.8 --libdir=/usr/lib --enable-nls --with-sysroot=/ --enable-clocale=gnu --enable-libstdcxx-debug --enable-libstdcxx-time=yes --enable-gnu-unique-object --disable-libmudflap --enable-plugin --with-system-zlib --disable-browser-plugin --enable-java-awt=gtk --enable-gtk-cairo --with-java-home=/usr/lib/jvm/java-1.5.0-gcj-4.8-amd64/jre --enable-java-home --with-jvm-root-dir=/usr/lib/jvm/java-1.5.0-gcj-4.8-amd64 --with-jvm-jar-dir=/usr/lib/jvm-exports/java-1.5.0-gcj-4.8-amd64 --with-arch-directory=amd64 --with-ecj-jar=/usr/share/java/eclipse-ecj.jar --enable-objc-gc --enable-multiarch --disable-werror --with-arch-32=i686 --with-abi=m64 --with-multilib-list=m32,m64,mx32 --with-tune=generic --enable-checking=release --build=x86_64-linux-gnu --host=x86_64-linux-gnu --target=x86_64-linux-gnu
/ m5 H/ J% W3 V, nThread model: posix4 M; e+ G; T, k" U* i4 _ z" g8 A1 v
gcc version 4.8.5 (Ubuntu 4.8.5-4ubuntu2)+ [; _. L9 u6 }5 [- {- D( U
1 a7 A' c! |5 s! Z t# {# y' Z% B! L- [2 I- j% g/ I
; P; N8 m2 q) ^" J2 M6.当需要取消使用自己定义的gcc版本时,直接重命名当前目录下的bin,然后执行source ~/.bashrc即可。$ _% t$ J/ j5 p6 m0 G( ~" k; [1 k
5 s9 ]% t; g: q# V; a0 c
- l, o) p- O; [1 C4 J' c |
|