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

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

[复制链接]

该用户从未签到

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

EDA365欢迎您登录!

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

x
* ^4 V8 \6 t5 u% S. r
Linux下,有时经常需要使用不同版本gcc进行测试,尤其是有些大型程序,例如,如果第一次编译版本是gcc5.0,修改了其中一个文件,如果编译器改为gcc6.0,则运行时会出一些奇怪错误,甚至无法debug。我曾经遇到,类似一个问题,编译时不报错,运行时把其中一个int型数据0,当成了指针地址,报错segment fault,访问0地址错误。( U" X( o( A1 m# N1 f5 ^

% D' U. C* q: c2 E+ c6 w为了实现单独用户使用特定编译器版本,可以利用Linux下环境变量初始化顺序的方式:
4 u7 P- q( n, v0 z( ]1 {) p2 ?, H) G& H4 [. O" `
0. 查看当前gcc版本:- y1 E4 |$ D) X! ~

) K! S4 F. J7 ^$ c! V' r5 ?: W$ gcc -v
/ j* Y% L* `* l5 L
' ^( |3 d: S7 F% K6 LUsing built-in specs.
. ?& H  n( f& c* f1 l) R% LCOLLECT_GCC=gcc
; g+ i+ M$ F+ y+ z9 kCOLLECT_LTO_WRAPPER=/usr/lib/gcc/x86_64-linux-gnu/5/lto-wrapper
7 j9 Y$ ]1 `. l2 V% L% G! d. ZTarget: x86_64-linux-gnu
, n6 Q" p3 Y( ~& M! @. i- M7 JConfigured 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
- d# D0 e: q' t' ~- ?- `0 u' NThread model: posix  z1 W. K4 ?- b& i+ _6 Z
gcc version 5.4.0 20160609 (Ubuntu 5.4.0-6ubuntu1~16.04.5) + B8 C0 K  c1 H! M  C
2 c1 p6 S' D3 T5 U; J, q
1. 安装一个特定版本的gcc,但是不要做默认gcc的修改,比如在ubuntu下,用命令行安装gcc:
0 a, ]" u5 u! v' c) M
. g3 E$ C* ?: p& u5 Qsudo add-apt-repository ppa:ubuntu-toolchain-r/test6 d1 o. C0 V' `4 Y8 U, `: J9 i

% Z5 u8 r) P6 U" |4 \" A4 g sudo apt-get update
; h* {/ v' N- R6 ]/ @
+ H5 Q; b/ ]9 i+ m4 M- J) v# z7 Vsudo apt-get install gcc-6
. J! D  d/ x+ @8 j+ I) O* k& g9 e; O! G( d
2. 在自己的home目录下,建立一个目录bin,然后做好软链接:3 u/ r6 A5 k- O; K
' ?! Q( H, d: N1 A: x
$ mkdir bin
& L  Q' L/ \: i$ g0 J" |4 x# Y6 i  a9 \; y8 W: j
$ ln -s /path/to/new/install/gcc  ./bin/gcc
. Y- |2 F# {  J. E% @7 F. Y; j6 u0 X; z( t/ E3 Y6 M
$ ln -s /path/to/new/install/g++  ./bin/g++2 b! [8 }  c. k7 y# z

% V$ w# f8 |1 R0 }6 ?1 D$ k查看是否软链接成功:
# i) U( Z/ H7 ]9 j8 l# o+ K' j/ v4 z) ]; I; i. v% |3 |6 j* O
haha@test:~$ ls ./bin -l& A  [' G& \# j( M" Q
total 0
, [; _9 J7 C/ R& S3 V- z8 ilrwxrwxrwx 1 test  16 Jan 10 16:24 g++ -> /usr/bin/g++-4.8
. ?! k4 I1 D5 s4 T( Glrwxrwxrwx 1 test  16 Jan 10 16:24 gcc -> /usr/bin/gcc-4.8) a5 T" ]. e# T- ~1 n" t( s0 N
1 C3 v0 G* l! h$ c3 s
3. 修改自己home目录下的.bashrc,添加以下内容:
- k8 F7 K/ v/ m8 @
9 o" W$ {/ ]5 q, u# j9 g" y( bexport PATH=$PATH:~/bin   #to use local gcc 4.8 not global gcc5.5  
. A1 W( W/ c" g% {& ?2 v! H8 n4 R- f
4. 执行以下命令让修改生效:0 c3 f" T! i6 l- H

/ ^  @: i) w! |- ~0 E$ source ~/.bashrc
& B( n6 ~. W) Q( I1 R- t) h& a; s+ g" ~- T& _" f* S' k/ k2 N1 C
5. 测试是否生效:0 F+ z( Y3 L8 H* [  W) D

: y6 y& S* O& S$ gcc -v% U0 g  G7 y. z
* W- B* Z8 |! B; K+ s
Using built-in specs.+ h, S9 Y  G4 X; r- F
COLLECT_GCC=gcc& T+ J- }! {% E& }# F/ H: U
COLLECT_LTO_WRAPPER=/usr/lib/gcc/x86_64-linux-gnu/4.8/lto-wrapper
1 h* {8 X( [& f; ?& p# p+ Z$ p0 \Target: x86_64-linux-gnu3 x. r% d5 u, z6 E" |% d$ H
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* t' R  ~' N' n. C3 m
Thread model: posix
' S5 j7 `3 N/ @- Qgcc version 4.8.5 (Ubuntu 4.8.5-4ubuntu2)8 l/ ]' Y. \# q, u- @1 v7 ~1 R

& j3 X% d$ x0 Z( Y8 r# y) p* t5 T$ u& A: @/ J  ^

1 S5 R5 L2 t2 w4 _: c" n6.当需要取消使用自己定义的gcc版本时,直接重命名当前目录下的bin,然后执行source ~/.bashrc即可。
6 D' o$ N0 _  N9 W, n, ?4 ?+ h
5 ?, q8 N+ Q1 m$ D, i! @$ z5 P$ u# G" j

该用户从未签到

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

本版积分规则

关闭

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

EDA365公众号

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

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

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

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

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