|
|
EDA365欢迎您登录!
您需要 登录 才可以下载或查看,没有帐号?注册
x
: r7 d& F2 ~2 \' k3 O, `5 VLinux下,有时经常需要使用不同版本gcc进行测试,尤其是有些大型程序,例如,如果第一次编译版本是gcc5.0,修改了其中一个文件,如果编译器改为gcc6.0,则运行时会出一些奇怪错误,甚至无法debug。我曾经遇到,类似一个问题,编译时不报错,运行时把其中一个int型数据0,当成了指针地址,报错segment fault,访问0地址错误。- @- w ]( K- D+ ]4 p, V
( B+ S9 I/ g2 m- Z3 b% y' N" @2 ^为了实现单独用户使用特定编译器版本,可以利用Linux下环境变量初始化顺序的方式:( j. C6 V0 o- ?2 k& q0 P6 k
& @# D; j( F( B0. 查看当前gcc版本:) Q% h6 a- J5 s2 m+ q8 I
2 U0 f) v; U6 v1 n; }9 H8 y$ G
$ gcc -v
w2 I; e" f, t9 c/ ~# |/ y6 |
# E. W6 R, z9 ?! L/ }$ @1 @1 _Using built-in specs.' q* S8 g4 W4 _# x0 ]
COLLECT_GCC=gcc
) w9 l* p- t$ G' _$ z& U# r) g( jCOLLECT_LTO_WRAPPER=/usr/lib/gcc/x86_64-linux-gnu/5/lto-wrapper( {( V4 v$ x7 v' }% P y: Q
Target: x86_64-linux-gnu
3 m x. Y7 h- R4 o5 pConfigured 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-gnu4 ~2 J# U9 _( u0 t
Thread model: posix
8 r& E- S) d4 [- Q9 ?, M( |6 wgcc version 5.4.0 20160609 (Ubuntu 5.4.0-6ubuntu1~16.04.5) ) L7 P% j% x' P; Z: a7 _1 k p
0 b: }8 M1 D: U2 I$ i( n* v
1. 安装一个特定版本的gcc,但是不要做默认gcc的修改,比如在ubuntu下,用命令行安装gcc:! S' i4 A" Z/ k7 i+ w# u
0 J: O3 t+ @8 O
sudo add-apt-repository ppa:ubuntu-toolchain-r/test7 c, M! U" w' I3 o }
: x5 s( n. J" E% P5 f8 ^; ^ sudo apt-get update5 C3 x' j( O( R& f) [6 c9 K
. N4 k$ X) W; I1 qsudo apt-get install gcc-60 N3 r- `; _' V$ G" B" {& G; c
& n. W# \ K( N$ i6 L! j% B
2. 在自己的home目录下,建立一个目录bin,然后做好软链接:
5 W8 B5 z! q: ^ e6 ?5 h* z% P% ?, I& ~7 L' h
$ mkdir bin
: w8 V! }0 N3 q4 V- X, M2 H
! A0 ~2 M" I* P2 ^( x$ ln -s /path/to/new/install/gcc ./bin/gcc
$ T; U3 ~ Y. c$ f" q5 f% ?% l$ J9 Y% t% B8 b
$ ln -s /path/to/new/install/g++ ./bin/g++2 T) L. @- w6 o# ^
. p* x* S# D, F! Z9 j
查看是否软链接成功:
4 b: T% z) e, W/ O* b G! g
0 ?' \1 F! Z9 Hhaha@test:~$ ls ./bin -l
# z- z' c7 V8 Ftotal 0" b& J0 \) o6 v
lrwxrwxrwx 1 test 16 Jan 10 16:24 g++ -> /usr/bin/g++-4.81 t7 b7 `1 ^9 V' Y, Q
lrwxrwxrwx 1 test 16 Jan 10 16:24 gcc -> /usr/bin/gcc-4.8
* p0 t- C- l/ g0 h- V t! `7 a3 n% y8 m. G4 z0 _
3. 修改自己home目录下的.bashrc,添加以下内容:
. n7 D ] B: Y$ [ u
5 l- |$ X/ ?9 i# W$ _9 s- Oexport PATH=$PATH:~/bin #to use local gcc 4.8 not global gcc5.5
. w& H+ y4 H) ~) [4 `; p, N% G6 \0 G$ ]1 b3 H
4. 执行以下命令让修改生效:
+ ^7 R" {- z3 R! W+ h3 z$ {7 X
! s9 x/ [: I+ y- ]( N$ source ~/.bashrc
5 Z$ N: f _, h: D9 T* L3 _( @2 X! }" ~3 t$ J% j% ^
5. 测试是否生效:
* I# l4 ` c) c& s( S4 X" G! x, [1 p- U+ S6 V- E
$ gcc -v
2 @8 d( V0 A- B$ H! ]- e
2 q; q% a% K! `# Q/ x: {8 oUsing built-in specs.; e3 K* o( T6 f, e% \
COLLECT_GCC=gcc' a- V( S- y5 j7 q# i3 S5 O
COLLECT_LTO_WRAPPER=/usr/lib/gcc/x86_64-linux-gnu/4.8/lto-wrapper; N% u7 A7 a7 f4 d6 c+ V
Target: x86_64-linux-gnu
! H5 l+ e! _3 z( sConfigured 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& p/ _* G; t9 J j
Thread model: posix
" k6 c( I" X! `; C0 tgcc version 4.8.5 (Ubuntu 4.8.5-4ubuntu2)* i+ n; d1 Z, g, d- |
D+ o5 n) y( L
: V) t! V, [7 ?
' \! j& ~3 T2 ?& R; q) w6.当需要取消使用自己定义的gcc版本时,直接重命名当前目录下的bin,然后执行source ~/.bashrc即可。# q, c: i8 O+ e) e% F$ J
2 W( s2 g6 @* y& A
8 I, ~ l& S6 d i |
|