找回密码
 注册
关于网站域名变更的通知
查看: 341|回复: 1
打印 上一主题 下一主题

在Linux下,不同用户使用不同版本gcc的方法

[复制链接]

该用户从未签到

跳转到指定楼层
1#
发表于 2020-2-7 09:42 | 只看该作者 回帖奖励 |倒序浏览 |阅读模式

EDA365欢迎您登录!

您需要 登录 才可以下载或查看,没有帐号?注册

x
* U4 s2 k5 G: d2 f; ]1 ^5 j0 O
Linux下,有时经常需要使用不同版本gcc进行测试,尤其是有些大型程序,例如,如果第一次编译版本是gcc5.0,修改了其中一个文件,如果编译器改为gcc6.0,则运行时会出一些奇怪错误,甚至无法debug。我曾经遇到,类似一个问题,编译时不报错,运行时把其中一个int型数据0,当成了指针地址,报错segment fault,访问0地址错误。
; |/ y! D( W: z. I  Y9 M' h
5 t1 d  ]2 L: K% j9 n; z" g4 n为了实现单独用户使用特定编译器版本,可以利用Linux下环境变量初始化顺序的方式:
4 t+ q& N/ ?6 L- l4 X# ~
4 r- k) G+ B1 t4 s0. 查看当前gcc版本:3 u- a9 R8 W* {- E1 n* x- i; R
' m% K5 Q0 I: Z; e/ F0 V1 h% T4 ~
$ gcc -v( t- r" ~8 b  N% l
7 \9 j! |7 o  E& }5 O
Using built-in specs.
* g4 W3 [# l' `COLLECT_GCC=gcc/ x* m/ G4 A4 }2 X* u
COLLECT_LTO_WRAPPER=/usr/lib/gcc/x86_64-linux-gnu/5/lto-wrapper
7 {1 e9 u2 Z4 _& ~) X" l$ w7 C( ITarget: x86_64-linux-gnu
5 j  C# [* F  E8 CConfigured 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
" {9 @) J2 z: u  X! L" j# d: uThread model: posix3 o' s2 l/ w2 E, s
gcc version 5.4.0 20160609 (Ubuntu 5.4.0-6ubuntu1~16.04.5) ' ~: Q$ i! G: u& M, Y

' ?9 C- x6 o5 I! c1. 安装一个特定版本的gcc,但是不要做默认gcc的修改,比如在ubuntu下,用命令行安装gcc:" w- F" i4 s' F$ g3 v
+ ^! C; h) I& r- l
sudo add-apt-repository ppa:ubuntu-toolchain-r/test
- C/ v% Z2 V5 Q! K6 Z
9 w! C( [+ n6 N/ w sudo apt-get update8 {8 R, r2 {, B" T% q' A+ _$ v
! t) y" M, W1 j' l5 W: N
sudo apt-get install gcc-6
0 f; I2 C: I) R8 H; |' r9 ]
; Z2 K* ]0 \6 L' K+ @1 S! r. s2. 在自己的home目录下,建立一个目录bin,然后做好软链接:
9 M8 @, m. y* G1 F. R; S2 |" k* E) i) t) Z& Q) J7 f
$ mkdir bin1 |/ P. ?! e2 \4 A( M/ F

8 y" R) s' X% m" \' A, _5 l* a0 _$ ln -s /path/to/new/install/gcc  ./bin/gcc
* U# R8 N) O' V' {2 L9 M. n
1 u- d( e* ~6 D' R$ ?' o" Z$ ln -s /path/to/new/install/g++  ./bin/g++
( t& F+ {& S9 Y0 C+ d# ]. F( K' D0 x
查看是否软链接成功:
9 k9 d& F# r% M) u1 d( e, h3 D. ]' {/ l" `; \3 w
haha@test:~$ ls ./bin -l3 g& _3 c9 z9 l* a6 t; M
total 07 p4 \8 r( R' A( R6 Q2 \+ [
lrwxrwxrwx 1 test  16 Jan 10 16:24 g++ -> /usr/bin/g++-4.8
) q$ _3 n, i5 W" J$ ?* Xlrwxrwxrwx 1 test  16 Jan 10 16:24 gcc -> /usr/bin/gcc-4.87 z* F/ Q( N! b) p) U4 T, X
/ L1 p6 J8 A' C* k7 U/ U
3. 修改自己home目录下的.bashrc,添加以下内容:& q& j+ [, f* X* R2 A
4 a2 P. C6 }" r# q5 b
export PATH=$PATH:~/bin   #to use local gcc 4.8 not global gcc5.5  
& X4 a/ i1 Q' ^" h: M& l5 i; W
4. 执行以下命令让修改生效:
3 i; ?" P- F. X; M5 D0 j2 k* f
$ `& i% a5 k$ d$ m5 R$ source ~/.bashrc0 u3 F9 W0 A( T! P/ M4 a

" q7 t. ?, }3 |, C: S2 _5. 测试是否生效:
* F7 W1 K0 U7 D& K* ~
' y3 A% s' G6 g2 f$ gcc -v6 d) i. u6 v8 i' T7 W
5 k0 |  s- [: }5 J+ j/ P; m) g
Using built-in specs./ s' x0 `1 S, {: j+ r
COLLECT_GCC=gcc; l" i$ c/ r2 @! `- v6 C. \
COLLECT_LTO_WRAPPER=/usr/lib/gcc/x86_64-linux-gnu/4.8/lto-wrapper8 m; d  z8 L2 k( Q! o
Target: x86_64-linux-gnu
, ]! V& F0 h8 [! S+ n  m  W8 ?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
- N) }& o6 F0 R  n0 PThread model: posix6 g7 d5 \2 ~! _& @+ w) e; i
gcc version 4.8.5 (Ubuntu 4.8.5-4ubuntu2)
/ h3 C( q( f; u4 p1 T# u; w
  H9 \) P! l! J1 z, g! E9 [0 O" H4 V" l1 D% m

: c  Z; f+ |4 L: W6.当需要取消使用自己定义的gcc版本时,直接重命名当前目录下的bin,然后执行source ~/.bashrc即可。  o3 i2 E/ N4 |! G5 q

; K$ w8 L, r1 v' _5 M) r- c- `: E! @) ]# S

该用户从未签到

2#
发表于 2020-2-7 20:41 | 只看该作者
在Linux下,不同用户使用不同版本gcc的方法
您需要登录后才可以回帖 登录 | 注册

本版积分规则

关闭

推荐内容上一条 /1 下一条

EDA365公众号

关于我们|手机版|EDA365电子论坛网 ( 粤ICP备18020198号-1 )

GMT+8, 2025-11-24 08:19 , Processed in 0.140625 second(s), 23 queries , Gzip On.

深圳市墨知创新科技有限公司

地址:深圳市南山区科技生态园2栋A座805 电话:19926409050

快速回复 返回顶部 返回列表