EDA365电子论坛网

标题: 在Linux下,不同用户使用不同版本gcc的方法 [打印本页]

作者: mytomorrow    时间: 2020-2-7 09:42
标题: 在Linux下,不同用户使用不同版本gcc的方法

8 ?" N8 @8 S: Y. J, Q! L; yLinux下,有时经常需要使用不同版本gcc进行测试,尤其是有些大型程序,例如,如果第一次编译版本是gcc5.0,修改了其中一个文件,如果编译器改为gcc6.0,则运行时会出一些奇怪错误,甚至无法debug。我曾经遇到,类似一个问题,编译时不报错,运行时把其中一个int型数据0,当成了指针地址,报错segment fault,访问0地址错误。" @/ W, T" I( J( t# y0 i
8 T# Z9 \/ b- j& R4 `+ |/ B' K- ^
为了实现单独用户使用特定编译器版本,可以利用Linux下环境变量初始化顺序的方式:
6 T$ B" P* Y( k0 X. f: w8 M8 i* E% ~9 s
0. 查看当前gcc版本:
) @% R  Y9 p9 X! F( i6 x6 j' _: a5 J+ i+ O# L  Y
$ gcc -v
5 ], {" p1 h  P  n
9 I# m/ F4 N( @) ?" B) xUsing built-in specs.
8 |9 ]: I! S, x) D  z% x! t$ t7 PCOLLECT_GCC=gcc  M( v1 p( T' J0 s: W
COLLECT_LTO_WRAPPER=/usr/lib/gcc/x86_64-linux-gnu/5/lto-wrapper/ Z' ^# x) y, K% Z, m1 P0 p
Target: x86_64-linux-gnu
* e1 ]5 d) q/ d! UConfigured 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+ c( @& S9 q! P7 }3 L
Thread model: posix) d7 ~; a: k! X- Y; c9 c+ O
gcc version 5.4.0 20160609 (Ubuntu 5.4.0-6ubuntu1~16.04.5)
* J5 B0 X# `; H4 B
$ z$ t* h( g2 ~# Q/ K1. 安装一个特定版本的gcc,但是不要做默认gcc的修改,比如在ubuntu下,用命令行安装gcc:
& b' P+ m5 m& P* s5 q0 f+ `% D4 Q- x+ L( Q+ A/ W, f) v9 q
sudo add-apt-repository ppa:ubuntu-toolchain-r/test
7 m$ Q' g- j" ^. x! D2 p0 x
7 G6 S' k; F0 y  O6 z sudo apt-get update
5 O) y  R( {% h  W3 J
) [' N# \0 L1 M( Y6 zsudo apt-get install gcc-6
( B8 @9 u9 L, N% n# L, c1 c6 W9 q% ^7 D" Y/ a" ?
2. 在自己的home目录下,建立一个目录bin,然后做好软链接:" P; u% T4 I1 E

8 t* I2 Z' n& G0 }$ mkdir bin
, r: }1 y. ?: j
, {. M% C5 u, D; G& Y3 l+ k$ ln -s /path/to/new/install/gcc  ./bin/gcc8 ?& h" r0 v+ h: \. Q
5 O; E( ?2 X& z; X. }
$ ln -s /path/to/new/install/g++  ./bin/g++3 p! f* Z& M8 @3 _5 @; V3 r
. W5 ]# V* y* h7 z% j
查看是否软链接成功:
( u0 Q9 _% q7 {% G  w
1 n" A8 Q9 \2 S  ]# n3 S! ihaha@test:~$ ls ./bin -l
8 _! z  @* {& q; O  ototal 02 L$ J5 |- D& t1 [
lrwxrwxrwx 1 test  16 Jan 10 16:24 g++ -> /usr/bin/g++-4.8
* j0 ^* G1 @( i* `+ @, o( Elrwxrwxrwx 1 test  16 Jan 10 16:24 gcc -> /usr/bin/gcc-4.8' }+ r# O7 {0 s) g& d( G3 b" W+ D

7 O; i: z6 X: `& [& V3. 修改自己home目录下的.bashrc,添加以下内容:) G- w, H2 j+ c" W" a

' ]* O8 N6 T* B3 O. M4 Vexport PATH=$PATH:~/bin   #to use local gcc 4.8 not global gcc5.5  
! _9 T- U) [! L$ A5 {; q4 c+ `* F& z# N
4. 执行以下命令让修改生效:
3 v. Q$ `' t/ u# e
: g0 e; U4 H! {$ source ~/.bashrc* z% `! s8 L1 M" `4 x2 F. j  f

. ^/ _+ v. h; W4 G+ Q  ^5. 测试是否生效:! }; y4 z! Y3 G* P  K  g9 X

. g" n  J) ^+ g1 w6 g& j& _- @4 [$ gcc -v
! a$ {% c7 v* G
1 G$ i! A  L! \+ e7 lUsing built-in specs.
& H: L# |& A! @$ P( z3 j$ _COLLECT_GCC=gcc, K  x& Z) ]& L. X, E. f
COLLECT_LTO_WRAPPER=/usr/lib/gcc/x86_64-linux-gnu/4.8/lto-wrapper. f) \, o# }- z) V7 O3 F0 y6 q
Target: x86_64-linux-gnu6 D" c! f7 n* E8 J
Configured 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/ k+ g! w7 \* h) B$ D# X, S/ D% m
Thread model: posix
* ~1 Z3 P7 Z0 R* t1 xgcc version 4.8.5 (Ubuntu 4.8.5-4ubuntu2)0 \( p) k- Y9 k# J3 `. o

2 o8 @0 R9 q' ?' m& {0 @7 W# b6 @0 d4 ^

1 ^$ @" }- v" l' s6.当需要取消使用自己定义的gcc版本时,直接重命名当前目录下的bin,然后执行source ~/.bashrc即可。
" `3 E8 i3 u6 S* ]. B" U5 N9 h4 N3 {) a* \% _5 l& ^

# C: R/ L) W  V# @6 U# t" F
作者: CCxiaom    时间: 2020-2-7 20:41
在Linux下,不同用户使用不同版本gcc的方法




欢迎光临 EDA365电子论坛网 (https://bbs.eda365.com/) Powered by Discuz! X3.2