ubuntu公升級到了
12.04, gcc
也公升級到了
4.6.3
,重新編譯專案工程時發現許多以前的警告變成了錯誤,仔細一看**都是在取
c++的臨時變數位址做引數出錯,以前為了方便很多這樣的**
兩種改法:1.
改**,顯示定義乙個臨時變數,再取位址;2.加
fpermissive
做編譯引數。
前者工作量大,後者可能會忽略其他編譯錯誤,不可取。於是想到自己編乙個gcc 4.5.2
版本,構建此專案時用老版本,其他則用新版本。谷歌了下,下面是在
ubuntu12.04 64
位上構建
gcc的完整過程,摘自
,注意:
1. 32位系統請將 library_path=/usr/lib/x86_64-linux-gnu/,c_include_path=/usr/include/x86_64-linux-gnu, cplus_include_path=/usr/include/x86_64-linux-gnu,改為
library_path=/usr/lib/i386-linux-gnu/,c_include_path=/usr/include/i386-linux-gnu, cplus_include_path=/usr/include/i386-linux-gnu。最好將這些變數寫入~/.bashrc 。
2. 應嚴格按照下面的步驟,如果出錯,檢查是否遺漏步驟。
3. 取消自己構建版本gcc
使用系統自帶
gcc的方法是,從
path
變數中去掉對應
gcc版本的路徑。
本文將介紹如何在 ubuntu 12.04 下編譯 gcc 4.7,我很奇怪的是在 ubuntu 下編譯 gcc 原始碼也那麼複雜,不過 ubuntu 也是 linux 系統之一,就沒什麼好奇怪的了。
首先檢查你是否已經預設安裝 ubuntu gcc 和 binutils ,如果你使用了 64 位的桌面版本,那麼預設是已經安裝了。下面的部分我們建議你開啟乙個終端來執行相應的命令。
在此之前建議更新下系統,執行如下命令:
1sudo apt-get install update
2sudo apt-get install upgrade
接下來我們需要安裝一些所需的軟體包:
1sudo apt-get install g++
2sudo apt-get install
gawk
3sudo apt-get install m4
4sudo apt-get install gcc-multilib
然後選擇 gcc-4.7 的最新穩定版本,檔名是 gcc-4.7.0.tar.bz2. 將它儲存到本地。
你還需要另外三個庫才能成功編輯 gcc,這三個庫分別是:mpc
, mpfr
和 gmp
開啟終端進入上述幾個檔案所在的目錄:
1cd ~
2cd downloads
我們先開始編譯 gmp 庫
1cd gmp*
2mkdir build && cd build
3../configure --prefix=/usr/gcc_4_7 --build=x86_64-linux-gnu
4make
5sudo
make
install
幾分鐘後你將有乙個已編譯好和安裝好的 gmp 庫,如果一切順利,恭喜你!
使用相同的步驟來編譯 mpfr:
1cd ..
2cd ..
3cd mpfr*
4mkdir build && cd build
5../configure --build=x86_64-linux-gnu --prefix=/usr/gcc_4_7 --with-gmp=/usr/gcc_4_7
6make
7sudo
make
install
緊接著是 mpc:
1cd ..
2cd ..
3cd mpc*
4mkdir build && cd build
5../configure --build=x86_64-linux-gnu --prefix=/usr/gcc_4_7 --with-gmp=/usr/gcc_4_7 --with-mpfr=/usr/gcc_4_7
6make
7sudo
make
install
到這一步就完成個 gcc 所需包的編譯和安裝,在某些機器上這三者的編譯可能超過乙個小時,做好心理準備。
接下來我們可以開始編譯 c/c++ 和 fortran 編譯器:
01cd ..
02cd ..
03mkdir build && cd build
04export library_path=/usr/lib/x86_64-linux-gnu/
05export c_include_path=/usr/include/x86_64-linux-gnu
06export cplus_include_path=/usr/include/x86_64-linux-gnu
07../gcc-4.7.0/configure --build=x86_64-linux-gnu --prefix=/usr/gcc_4_7 --with-gmp=/usr/gcc_4_7 --with-mpfr=/usr/gcc_4_7 --with-mpc=/usr/gcc_4_7 --enable-checking=release --enable-languages=c,c++,fortran --disable-multilib --program-suffix=-4.7
08make
09sudo
ln -s /usr/lib/x86_64-linux-gnu /usr/lib64
10sudo
make
install
下面命令可將 gcc 4.7 新增到系統路徑中,或者直接編輯 .bashrc 檔案並在最後新增下面一行:
1export path=/usr/gcc_4_7/bin:$path
你不知道什麼是 .bashrc 檔案?沒關係,開啟終端執行:
1cd ~
2gedit .bashrc
1./.bashrc
下面是呼叫編譯器的簡單方法
1g++-4.7 test.cpp -o test
如果你的磁碟空間緊張,記得刪除原始碼檔案目錄下的 *build* 子目錄。
接下來我們檢查 g++-4.7 是否能編譯一些 c++11 規範的**,開啟你喜好的編輯器,複製下面一段**並保持該檔案為 tst_lambda.cpp:
view source
print?01
//program to test the new c++11 lambda syntax
02#include
0304
using
namespace std;
0506
int main()
0708
cout << (int m, int n) (2,4) << endl;
09return 0;
10編譯並執行上述 lambda
示例將返回 6:
1g++-4.7 -std=c++11 tst_lambda.cpp -o tst_lambda
2./tst_lambda
3g++-4.7 同時也支援 c++11 執行緒:
01//create a c++11 thread from the main program
0203
#include
04#include
0506
//this function will be called from a thread
07void call_from_thread() {
08std::cout << "hello, world!" << std::endl;
0910
11int main() {
12//launch a thread
13std::thread t1(call_from_thread);
1415
//join the thread with the main thread
16t1.join();
1718
return 0;
19
Dojo Grid同時支援新老版本
迫於諸多dojo1.1.1使用者的強烈要求,現在的dojo同時支援兩種grid 新版本grid 1.2 和老版本grid 1.1.1 現在的目錄結構有些奇怪 dojo dojox grid js 1.2的js 增加grid.js和virtualgrid.js是用於相容 dojo dojox grid...
grads 新老版本目錄對比
最近不少人都在使用opengrads,最新的版本已經更新到了2.0.a9,具體grads做了哪些更新,在附件裡面放了乙個,是英文的。很多人說在使用原來的一些教程的時候找不到相對應的資料夾了,其實仔細搜尋一下就能找到了,不過今天還是打算寫出來,供需要的人參考一下。原始的grads的資料夾大致有以下幾個...
GCC多版本共存
方法一 利用環境變數 方法二,鏈結 apt get install gcc 3.4 之後,你需要把usr bin 目錄下的gcc檔案刪除掉或者避免意外發生,可以把它命名為gcc.bak。這裡需要說明的如果你不刪除的話,你會 發現你使用ln s usr bin gcc 3.4 usr bin gcc總...