cd gcc-6.4.0
./contrib/download_prerequisites
三、構建
mkdir build
cd build
../configure -enable-checking=release -enable-languages=c,c++ -disable-multilib
四、編譯(此步用時較長)
make
五、安裝
make install
六、檢視安裝並切換版本
ls /usr/local/bin | grep gcc
ls /usr/bin/gcc*
ls /usr/bin/g++*
七、切換預設編譯器
新增優先順序(eg:100):
sudo update-alternatives --install /usr/bin/gcc gcc /usr/bin/gcc-4.8 100
sudo update-alternatives --install /usr/bin/g++ g++ /usr/bin/g++-4.8 100
注:gcc/g++版本號應該保持一致
八、儲存修改
sudo update-alternatives --config gcc
注:to select
檢視:
gcc -v
g++-v
編譯成.obj:無需具體實現,僅需函式原型(包含相應標頭檔案)
編譯成.exe:使用 -ldl鏈結庫,需要函式實現
常見報錯:
implicit declaration of function '***':未申明的引用 --找不到標頭檔案
對『***』未定義的引用--ld問題,找不到函式原型
gcc編譯器版本abi()問題:常發生在引用了string和list型別的採用gcc5之前版本編譯的第三方動態庫時。
不同版本編譯器對c++規範實現程度不一致,gcc5.1及之後版本為libstdc++
新增了新的特性,新增了__cxx11命名空間,string和list型別實際上是std::__cxx11::string和std::__cxx11::list,所以我們一般的using namespace std就會變成形如using namespace std::__cxx11的樣子。
(1)修改cmake中的巨集定義以選擇鏈結庫版本,舊版(c++03規範)/新版(c++11規範)
if(conan_libcxx strequal "libstdc++11")
add_definitions(-d_glibcxx_use_cxx11_abi=1)
elseif(conan_libcxx strequal "libstdc++")
add_definitions(-d_glibcxx_use_cxx11_abi=0)
endif()
由於編譯環境工具鏈版本較高,多數gcc編譯器的cmake應新增 add_definitions(-d_glibcxx_use_cxx11_abi=0)來編譯。
(2)新增makefile選項:
gcc -std=c14 -d_glibcxx_use_cxx11_abi=0 ........
Linux編譯器 gcc g 使用
gcc是乙個編譯器,將我們寫的高階語言轉化成機器語言 gcc如何完成 格式 gcc 選項 要編譯的檔案 選項 目標檔案 預處理 進行巨集替換 展開所有 gcc e 例 gcc e main.c o main.i o是重新命名,使main.c預處理後生成的檔案名叫main.i 編譯 生成彙編 糾錯,沒...
Linux編譯器 gcc g 使用
gcc 選項 要編譯的檔案 選項 目標檔案 預處理 進行巨集替換 在c語言程式中,並沒有printf函式的定義,stdio.h中也只有該函式的宣告,沒有該函式的實現。系統把這些函式的實現放到指定的庫檔案中例如 libc.so.6,gcc會到系統預設的路徑中進行查詢,這就是連線的作用 建立方法 將包包...
gcc(g )編譯器版本不同導致的報錯
linux 環境下 gcc version g version報錯資訊舉例 precompiler linux lib64 libc.so.6 version glibc 2.14 not found required by precompiler linux linux 環境下 檢視報錯庫的描述資...