|
|
EDA365欢迎您登录!
您需要 登录 才可以下载或查看,没有帐号?注册
x
$ `$ ~) I! [4 v7 f5 @9 {
Linux下,有时经常需要使用不同版本gcc进行测试,尤其是有些大型程序,例如,如果第一次编译版本是gcc5.0,修改了其中一个文件,如果编译器改为gcc6.0,则运行时会出一些奇怪错误,甚至无法debug。我曾经遇到,类似一个问题,编译时不报错,运行时把其中一个int型数据0,当成了指针地址,报错segment fault,访问0地址错误。
Z6 R; v' M: p* O( l' K8 d. f: m- i7 M
为了实现单独用户使用特定编译器版本,可以利用Linux下环境变量初始化顺序的方式:
. n. |/ b* E5 ^( I4 ]9 m& U( B) c( v" c: V0 Y x% \
0. 查看当前gcc版本:- g. u+ y# [+ J, \9 W9 k9 ?
3 J, ]7 ` C: }$ gcc -v: v1 \1 H9 T& S- m4 k0 i
& C" v$ L8 L' M$ v
Using built-in specs.
8 h7 s* ?# t; t/ RCOLLECT_GCC=gcc
- q' k) s" N& l2 S o$ }1 lCOLLECT_LTO_WRAPPER=/usr/lib/gcc/x86_64-linux-gnu/5/lto-wrapper
1 ]% c6 D6 k7 H7 ^- v0 r+ A3 tTarget: x86_64-linux-gnu
0 c9 S0 p/ x# Y" 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" `, p" w0 ?1 Y/ m, d- b
Thread model: posix
+ y0 g. L$ ^6 x) [ h) Y& {gcc version 5.4.0 20160609 (Ubuntu 5.4.0-6ubuntu1~16.04.5)
2 _+ z5 R8 z- a. a# L0 f; q' S7 }
1. 安装一个特定版本的gcc,但是不要做默认gcc的修改,比如在ubuntu下,用命令行安装gcc:* B! M$ i; R- S. ^7 _9 _" A a
8 u0 M8 b2 q" p; w8 e v' a
sudo add-apt-repository ppa:ubuntu-toolchain-r/test- G0 D7 C( v2 l) R# D
1 i: Q" ~$ d! ?/ ~( U d
sudo apt-get update
( g( n( t( ]! R# T9 n4 |' K* z
& c f0 A. Y2 ?) }! b5 ysudo apt-get install gcc-6
; v# N( z/ R/ ]5 W# M/ @: Y9 r5 a' Y3 f
2. 在自己的home目录下,建立一个目录bin,然后做好软链接:+ Q4 G) s2 l1 Q# b1 i4 U. b
9 y" L7 t. Q' @ [
$ mkdir bin+ q% A% p- N4 w: }
$ R1 h8 Y+ R( V/ i( R& z$ ln -s /path/to/new/install/gcc ./bin/gcc) y9 N8 w3 G2 o/ s. p7 D
2 Z+ D& B/ c% }9 [$ ln -s /path/to/new/install/g++ ./bin/g++
1 X% o5 b! |) V- W. z+ J2 C7 K6 [/ S0 j; J
查看是否软链接成功:) W6 S: ?/ ^# `) _1 B2 L7 c
* z. [9 l% F0 z9 w: w9 U. j/ m/ i- Lhaha@test:~$ ls ./bin -l! _9 f' u, E5 z. r/ v0 z6 N
total 0
9 B' x$ N; q7 m. _1 ^. ^lrwxrwxrwx 1 test 16 Jan 10 16:24 g++ -> /usr/bin/g++-4.8' V. C( _6 j" Z% y: p% C. W
lrwxrwxrwx 1 test 16 Jan 10 16:24 gcc -> /usr/bin/gcc-4.8% D# k! n. f! B
4 w- N% y, n9 `: N+ V" h3. 修改自己home目录下的.bashrc,添加以下内容:4 |7 F4 I0 O7 z' _/ e0 d; s9 p
2 ?% j. u8 Y- Z* t3 G6 ^export PATH=$PATH:~/bin #to use local gcc 4.8 not global gcc5.5
2 [5 ?" A8 W, c2 X8 k3 ^4 h+ l! V. a5 h9 Q/ s# d: e
4. 执行以下命令让修改生效:
+ v$ N5 [5 j! ^& F1 W$ v) G' |% V/ }/ Z
$ source ~/.bashrc
( }; G$ f- |5 [/ v) r' {0 f! p; o; C6 p6 w5 a
5. 测试是否生效:3 ] B) i4 \3 u3 ^
; `8 A" k; _' e6 ~- A" @/ p2 {$ gcc -v @* T% d& |4 q }( O
3 f9 Q$ C" r* \" _2 N4 P
Using built-in specs.
3 ]8 k3 Y* Z9 V+ _5 bCOLLECT_GCC=gcc/ W4 ^! T& p* z- F1 b+ _- N4 {
COLLECT_LTO_WRAPPER=/usr/lib/gcc/x86_64-linux-gnu/4.8/lto-wrapper
3 g/ ~& l3 r1 a2 E7 NTarget: x86_64-linux-gnu5 ?/ `/ {+ f. f% l6 |
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
8 g. R+ W; Y7 i1 z/ Z B* Z& HThread model: posix
0 z, G/ P& i( T% ^! H& m1 Egcc version 4.8.5 (Ubuntu 4.8.5-4ubuntu2)
* s: G: t( x. M$ n0 I) f: q5 U+ \3 d
: s, h* e ^! n9 h" ^
6 C4 W0 b0 [" V$ B0 R1 ~4 b/ z6.当需要取消使用自己定义的gcc版本时,直接重命名当前目录下的bin,然后执行source ~/.bashrc即可。
! M% |4 D7 {) d
7 S2 T. X& t# P7 C& Z
5 ?0 m" q+ k+ a |
|