|
|
EDA365欢迎您登录!
您需要 登录 才可以下载或查看,没有帐号?注册
x
7 P# y+ j& Q# C/ M" cLinux下,有时经常需要使用不同版本gcc进行测试,尤其是有些大型程序,例如,如果第一次编译版本是gcc5.0,修改了其中一个文件,如果编译器改为gcc6.0,则运行时会出一些奇怪错误,甚至无法debug。我曾经遇到,类似一个问题,编译时不报错,运行时把其中一个int型数据0,当成了指针地址,报错segment fault,访问0地址错误。& A; f" U& i# G
, \4 r0 ~: o; b3 A( y; x
为了实现单独用户使用特定编译器版本,可以利用Linux下环境变量初始化顺序的方式:+ h- v/ r9 z& \8 g
8 N* S- \/ m, Q3 U, j* m" f% u0. 查看当前gcc版本: r( `2 K6 x( k, G1 u- T$ u
% _3 x7 W( a" X& a& Z% }# v
$ gcc -v" c* F/ O+ x+ V( ?
( Z+ u& O# v* ~+ ?3 D8 }4 p9 yUsing built-in specs.
, X+ h8 V/ ?9 v) FCOLLECT_GCC=gcc& ?' f0 i% l$ Z9 Y3 {# c$ D. v
COLLECT_LTO_WRAPPER=/usr/lib/gcc/x86_64-linux-gnu/5/lto-wrapper
( L$ F) }" D$ h$ F1 wTarget: x86_64-linux-gnu: k7 o# r) Y3 B
Configured 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& u9 Y4 [& Q* n7 I8 p
Thread model: posix
) m5 z+ l" k6 A( L/ tgcc version 5.4.0 20160609 (Ubuntu 5.4.0-6ubuntu1~16.04.5)
+ D/ t i( D9 V }8 x( s
9 W9 H: N: C, i! n. [; Y1. 安装一个特定版本的gcc,但是不要做默认gcc的修改,比如在ubuntu下,用命令行安装gcc:
; a* n+ U) ^. E3 o5 b1 u/ L7 `8 F8 Y! M+ b0 F& B s c
sudo add-apt-repository ppa:ubuntu-toolchain-r/test: h' |. ~* c0 E+ {* x
9 d/ o$ u$ ?. J2 ?& ^: x sudo apt-get update& ~! b, G1 Q$ Y$ K/ {) p
& g/ {6 I, e5 d y7 R2 G1 E; F' S
sudo apt-get install gcc-66 Y8 f4 q$ {2 n# \" T) N; w1 z
. O) D3 s7 x9 f# F$ e5 w9 ?2. 在自己的home目录下,建立一个目录bin,然后做好软链接:2 G, C8 W- m" h
; ~1 S/ S3 j6 ~! ?" f6 j" h$ o. D5 s
$ mkdir bin
8 @; c, Y% ?) [7 s7 z2 r3 @! k, r, L$ G8 b; |4 B4 Z# T
$ ln -s /path/to/new/install/gcc ./bin/gcc
, w8 d+ A: {$ E; }# e7 s) e
2 i5 d) |) Z6 s, D% F6 h9 f& ]$ ln -s /path/to/new/install/g++ ./bin/g++* K; a1 F2 |2 T8 s1 y
- m. f- r4 N6 n6 C
查看是否软链接成功:! }) s5 u. p) g, d
# f. s: s( g8 S! Khaha@test:~$ ls ./bin -l# K# {) D) k) K' A
total 0
/ A% w# `) U, @4 i0 Blrwxrwxrwx 1 test 16 Jan 10 16:24 g++ -> /usr/bin/g++-4.8+ W4 D# R+ H- g g A3 ?
lrwxrwxrwx 1 test 16 Jan 10 16:24 gcc -> /usr/bin/gcc-4.8
( B1 B! F3 ~' w, [8 s7 L# @- z+ Y- U
$ r0 n9 E0 ? i* }3. 修改自己home目录下的.bashrc,添加以下内容:8 v# _: |0 Z( d9 o* G. N
, F+ x3 e3 k1 j% I* C& k @/ r# pexport PATH=$PATH:~/bin #to use local gcc 4.8 not global gcc5.5 9 ^$ e$ m( I6 V! X6 O' d4 r i4 e* v7 \1 d
5 v3 R: ]9 X) _5 M; D. _4. 执行以下命令让修改生效:
# z5 \9 p, T7 y# e/ F3 H0 z8 T! t* c; r. ^. F- z0 q8 o- P
$ source ~/.bashrc9 A9 l$ f2 B" K/ W8 D
2 x3 F6 }! k4 C# y( g0 C4 O
5. 测试是否生效:
: X @' c7 X' n. i& [
" _- ^- J5 c! V2 E$ p$ gcc -v
2 s' F; x. I+ y( H# K: M- e& O' M0 _7 i0 `1 D6 v
Using built-in specs.
" W+ E" |* k- O7 ]2 cCOLLECT_GCC=gcc
! R2 e) a7 U. m/ l' jCOLLECT_LTO_WRAPPER=/usr/lib/gcc/x86_64-linux-gnu/4.8/lto-wrapper% @! S+ \* z1 n% p6 M
Target: x86_64-linux-gnu3 m& e, d# _* @' y$ b8 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-gnu9 n' l& ~5 L9 S2 ] C6 G
Thread model: posix
% ~, p/ s5 d% L) @gcc version 4.8.5 (Ubuntu 4.8.5-4ubuntu2)
s) l' j# S; \! t6 Y" n1 {( P% L& t& {2 J* B# S
& a' L6 ^2 J6 A
+ b/ r1 `: Z6 p; G8 u E
6.当需要取消使用自己定义的gcc版本时,直接重命名当前目录下的bin,然后执行source ~/.bashrc即可。
4 W- ?# a; _$ k0 _+ O9 Z0 k$ c9 u8 i/ E. E# l) t
6 v6 X" c9 R" { g" ?( [% x- J' G% b
|
|