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

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

[复制链接]

该用户从未签到

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

EDA365欢迎您登录!

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

x

3 m7 S7 i  Z- w# X5 r; ^4 G0 k/ fLinux下,有时经常需要使用不同版本gcc进行测试,尤其是有些大型程序,例如,如果第一次编译版本是gcc5.0,修改了其中一个文件,如果编译器改为gcc6.0,则运行时会出一些奇怪错误,甚至无法debug。我曾经遇到,类似一个问题,编译时不报错,运行时把其中一个int型数据0,当成了指针地址,报错segment fault,访问0地址错误。* P( a6 v. `3 g

4 c( B1 e0 e' i3 b. a; S为了实现单独用户使用特定编译器版本,可以利用Linux下环境变量初始化顺序的方式:. ^, S: z9 A. G( o, t: ^
  R9 z# M. o+ ]! y% V6 J; u
0. 查看当前gcc版本:; @. N8 [! c, i4 K, d! X/ e& S
; p! V+ {/ J2 |' J8 K( t& V
$ gcc -v1 T- O( b- t$ Z( @; L0 |

" d8 B( a$ e. q& HUsing built-in specs.
8 w8 N: ?/ h8 F7 A$ ~COLLECT_GCC=gcc
6 Q2 I/ `8 R1 Y; E# S* z2 f- M! DCOLLECT_LTO_WRAPPER=/usr/lib/gcc/x86_64-linux-gnu/5/lto-wrapper
8 i4 q* k, x  W: Y) w  b2 Y2 OTarget: x86_64-linux-gnu
2 l6 q8 x) A- A" 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-gnu3 f* m+ {8 K- i7 ]% z; n' u
Thread model: posix
3 o& Q) i$ }" h6 E) B- Bgcc version 5.4.0 20160609 (Ubuntu 5.4.0-6ubuntu1~16.04.5)
% F) w$ `& I1 R3 h9 S/ {
. z" r" s/ r4 l8 U) |1. 安装一个特定版本的gcc,但是不要做默认gcc的修改,比如在ubuntu下,用命令行安装gcc:+ b, L9 ~' M' x; P) X) p+ L* [/ c/ u
; z1 h; E( M$ i. _% v) U8 d
sudo add-apt-repository ppa:ubuntu-toolchain-r/test
* Q5 Z/ d  i4 t/ C: X6 \  P* y
9 s' C! r/ x! c1 v% e# f+ @' k sudo apt-get update/ ~0 S: }- k% B
5 J$ t" e# N. f( D/ `% T7 l4 R
sudo apt-get install gcc-6
4 C+ t; f) H! a: d! i$ Q# ]4 _: l- ]" J
2. 在自己的home目录下,建立一个目录bin,然后做好软链接:
/ J! K2 F9 C% `
: M/ v) M4 M! i1 o/ c$ mkdir bin
$ _# w  p  Y0 |( K" _+ v% G) l5 V$ ^, w! K  n. m
$ ln -s /path/to/new/install/gcc  ./bin/gcc8 f' Z( K- L$ m2 f2 `1 G2 A

& @, O5 T! m5 K; E$ ln -s /path/to/new/install/g++  ./bin/g++4 |$ M' `% z( ]) r1 V, E0 F: u

" ?4 O* i) O& U- o+ C- Z- f: o& ]% s查看是否软链接成功:9 ~+ m& S$ ]) e6 {! N  k

. N. V# d: \2 J/ b2 a3 Chaha@test:~$ ls ./bin -l5 v' x/ Y' M5 B3 S% E. F  o, Q4 n
total 0
6 V8 \; ~  F; F, I9 hlrwxrwxrwx 1 test  16 Jan 10 16:24 g++ -> /usr/bin/g++-4.8
- V2 E( ?; W* B7 klrwxrwxrwx 1 test  16 Jan 10 16:24 gcc -> /usr/bin/gcc-4.8+ Z; _" w* F/ r# j6 |6 z7 W) J

+ x; \$ |; p: O$ b3 [! r3. 修改自己home目录下的.bashrc,添加以下内容:# o6 R( |5 j+ y; Q* a2 j+ n/ B

$ \$ Q+ k1 E6 N' J; B& s% Kexport PATH=$PATH:~/bin   #to use local gcc 4.8 not global gcc5.5  8 F0 [* }3 k) \( H# l
3 J- Q! A- m; s, D7 f7 H" S0 Q
4. 执行以下命令让修改生效:
# F3 `& @1 X1 `7 f8 `
1 G  Y; c9 k$ a  q! _% [$ source ~/.bashrc
6 I, Z/ ]/ e+ u0 R
7 E  Q) \& \1 C3 F4 @5. 测试是否生效:
$ a1 D# k; G1 Z! K; [7 g# p" W( M2 e7 ~& z, N  P
$ gcc -v
. }( Z1 O3 o4 v! B% f2 H: c) c5 h, s, k
Using built-in specs.* i3 ?7 `/ B7 O; |8 \
COLLECT_GCC=gcc
6 r" u( ?$ u% H% R! ~COLLECT_LTO_WRAPPER=/usr/lib/gcc/x86_64-linux-gnu/4.8/lto-wrapper
. p+ T( p' g6 c% _Target: x86_64-linux-gnu8 l  u8 S0 _5 T4 K/ }+ n
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
% u+ x8 d0 O' h5 u' o$ `7 hThread model: posix
3 Y' ?1 ]# L+ Y7 x- igcc version 4.8.5 (Ubuntu 4.8.5-4ubuntu2)
/ N" W: ^* ^" A& V5 }, {% ?7 l5 u6 \$ R$ @5 v' {' a
* v% K/ @5 D3 {3 k; ~# C

1 _) k. J4 _# _. g6.当需要取消使用自己定义的gcc版本时,直接重命名当前目录下的bin,然后执行source ~/.bashrc即可。
1 q- `0 }  R% M* v: E4 I# Y, s+ n. S" x- D9 G

$ D6 T* H$ V8 g  Z& Y) C# @1 ]

该用户从未签到

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

本版积分规则

关闭

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

EDA365公众号

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

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

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

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

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