1. 程式人生 > >Linux下不同使用者使用不同版本gcc的方法

Linux下不同使用者使用不同版本gcc的方法

Linux下,有時經常需要使用不同版本gcc進行測試,尤其是有些大型程式,例如,如果第一次編譯版本是gcc5.0,修改了其中一個檔案,如果編譯器改為gcc6.0,則執行時會出一些奇怪錯誤,甚至無法debug。我曾經遇到,類似一個問題,編譯時不報錯,執行時把其中一個int型資料0,當成了指標地址,報錯segment fault,訪問0地址錯誤。

為了實現單獨使用者使用特定編譯器版本,可以利用Linux下環境變數初始化順序的方式:

0. 檢視當前gcc版本:

$ gcc -v

Using built-in specs.
COLLECT_GCC=gcc
COLLECT_LTO_WRAPPER=/usr/lib/gcc/x86_64-linux-gnu/5/lto-wrapper
Target: x86_64-linux-gnu
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
Thread model: posix
gcc version 5.4.0 20160609 (Ubuntu 5.4.0-6ubuntu1~16.04.5) 


1. 安裝一個特定版本的gcc,但是不要做預設gcc的修改,比如在ubuntu下,用命令列安裝gcc:

sudo add-apt-repository ppa:ubuntu-toolchain-r/test

 sudo apt-get update

sudo apt-get install gcc-6

2. 在自己的home目錄下,建立一個目錄bin,然後做好軟連結:

$ mkdir bin

$ ln -s /path/to/new/install/gcc  ./bin/gcc

ln -s /path/to/new/install/g++  ./bin/g++

檢視是否軟連結成功:

[email protected]:~$ ls ./bin -l
total 0
lrwxrwxrwx 1 test  16 Jan 10 16:24 g++ -> /usr/bin/g++-4.8
lrwxrwxrwx 1 test  16 Jan 10 16:24 gcc -> /usr/bin/gcc-4.8

3. 修改自己home目錄下的.bashrc,新增以下內容:

export PATH=$PATH:~/bin   #to use local gcc 4.8 not global gcc5.5  

4. 執行以下命令讓修改生效:

$ source ~/.bashrc

5. 測試是否生效:

$ gcc -v

Using built-in specs.
COLLECT_GCC=gcc
COLLECT_LTO_WRAPPER=/usr/lib/gcc/x86_64-linux-gnu/4.8/lto-wrapper
Target: x86_64-linux-gnu
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
Thread model: posix
gcc version 4.8.5 (Ubuntu 4.8.5-4ubuntu2)


6.當需要取消使用自己定義的gcc版本時,直接重新命名當前目錄下的bin,然後執行source ~/.bashrc即可。

相關推薦

linux升級軟體包版本方法

       Linux環境下,要想檢視某個軟體(package)是否安裝。        rpm包方式安裝的,使用 rpm -qa | grep “軟體或者包的名字“。      

linux查看mysql版本的四種方法

ace linux下 help upload width lin sql 四種 xid Linux查看MySQL版本的四種方法 1 在終端下執行 mysql -V 2 在help中查找 mysql --help |grep Distrib 3 在mysql 裏查看 sele

LinuxJupyterNotebook中python版本/kernel共存的解決方法

一.首先說明一下我的環境: 我的環境是linux環境下的伺服器、跑python程式用的是安裝在伺服器上的Jupyter Notebook 二.我遇到的問題: 我的伺服器上的JupyterNotebook上只有Python2,而python2中編碼格式跟python3並不一樣,會出現許多錯

androidstudio 一個專案多個不同功能的版本解決方法(多渠道打包,生成不同包名的包)

剛接手了一個專案,主要功能是一樣的,只是部分功能需要根據不同的使用環境定製。這樣就出現了一個問題,我們是要建立多個專案來不同開發嗎?肯定不可以。 如果這樣分開來開發的話,以後如果基礎功能部分需要修改,

Linux提權————Linux三種不同方式的提權技巧

在滲透測試或者漏洞評估的過程中,提權是非常重要的一步,在這一步,黑客和安全研究人員常常通過exploit,bug,錯誤配置來提升許可權。本文的例子都是在虛擬機器裡測試的,不同的虛擬機器可以從Vulnhub下載。實驗一:利用Linux核心漏洞提權VulnOS version 2

【總結】linux比較檔案不同+製作補丁+使用補丁+壓縮檔案

以製作uboot補丁為例 製作補丁: (1)首先clean 一下: make distclean (2)修改檔名,解壓新檔案 mv  老目錄  新目錄 tar xjf   *.tar.bz2 (3

Linux安裝Redis4.0版本(簡便方法

    Redis介紹: Redis 是完全開源免費的,遵守BSD協議,是一個高效能的key-value資料庫。 Redis 與其他 key - value 快取產品有以下三個特點: Redis支援資料的持久化RDB和AOF,可以將記憶體中的資料儲存在磁碟中,重啟的時候可以再次載入進行

Windows訪問Linux的共享目錄的配置方法

cat tab all samb dha server nbsp lan eno user安全級別 第一步:安裝samba3(如果已經安裝就跳過這一步) [[email protected]/* */ /]# yum groupinstall "CIFS

Linux追加磁盤空間的方法

tab util fst 開機 nbsp 下拉 expand 增加 set 情景1:如果當前磁盤有容可擴 root用戶下,【fdisk -l】最大分區是/dev/sda3,新創建最新的分區是/dev/sda4 輸入【fdisk /dev/sda】 【n】添加新分區 【p】

Linuxrz/sz安裝及使用方法

文件選擇 登錄 class onf track 運行 使用方法 con rec 新搞的雲服務器用SecureCRT不支持上傳和下載,沒有找到rz命令。記錄一下如何安裝rz/sz命令的方法。 一、工具說明 在SecureCR

linux設定kettle的定時任務方法

1.     安裝centos 2.     安裝java環境參考網址:  http://www.cnblogs.com/haoliansheng/p/5832979.html

Linux各壓縮工具的使用方法

壓縮工具 compress compress +檔案【多個檔案時壓縮每個檔案為單獨的壓縮檔案】 壓縮該檔案,壓縮後該檔案消失,生成一個.z的壓縮檔案 compress -c +檔案 > 檔案.gz壓縮檔案並顯示過程 不會丟失原始檔,利用重定向保留原檔案 uncomp

Linux為命令設定別名的方法

               我們都知道,在管理和維護Linux系統的過程中,將會使用到大量命令,有一些很長的命令或用法經常被用到,重複而頻繁的輸入某個很長命令或用法是不可取的。這時可以使用 別名 功能將這個過程簡單化。Linu

Linux產生隨機數碼的多種方法

文章目錄 第一種:藉助環境變數$RANDOM 1. 產生0-25範圍內的數,用這個環境變數對26取餘即可。 2. 產生6位數的整數,用這個環境變數加上100000即可。

Linux編譯ffmpeg報錯gcc is unable to create an executable file C compiler test failed.

程式碼報錯資訊: [[email protected] ffmpeg-3.2.2]# ./configure --enable-shared --prefix=/usr/local/ffmpeg gcc is unable to create an executable

Linux帶空格的檔案刪除方法

實驗模擬: [[email protected] hbk]# touch a" ".txt [[email protected] hbk]# touch a.txt [[email protected] hbk]# ll 總用量 0 -rw-r--r--.

Linux如何查看版本信息

alt 如何 etc idt bsp ase cpu order 相關 1、Linux查看版本當前操作系統內核信息 uname -a 2、Linux查看當前操作系統版本信息 cat /proc/version 3、Linux查看版本當前操作系統發行版信息

修改linux的預設Python版本

首先在終端輸入:python --verison 檢視本機預設採用的python 版本 接著進入/usr/local/lib 目錄檢視當前系統中安裝了多少個python版本 如果只有一個,就安裝你需要的版本 sudo apt-get install python3 (這裡以python3為例)

Linux從視訊提取音訊的方法

Linux下可以利用mencoder將視訊裡的音訊提取出來。方法如下: 1、首先安裝mencoder.對於Ubuntu來說,軟體倉庫裡就有mencoder,可直接輸入如下命令安裝 sudo apt-get install mencoder 2、在命令列輸入 mencoder -oac mp3lame

linux寫驅動控制gpio的方法

arm linux下寫驅動控制gpio時,有兩種方法: 1. 用ioremap()得到暫存器的地址,然後用iowrite32()或writel()函式寫暫存器控制gpio 1)查datashee