g++/gcc選項
新增執行時共享庫目錄
執行使用共享庫的程式需要載入共享庫(不同於G++ 編譯時指定的連結庫),新增共享庫的步驟:
- 修改檔案 /etc/ld.so.conf 新增共享庫目錄
- 執行 ldconfig 同步更新一下
如:
1 | gedit /etc/ld.so.conf |
2 | #新增 /root/dreamlove/lib |
3 | ldconfig |
新增include,lib的搜尋路徑
對所有使用者有效修改/etc/profile對個人有效則修改~/.bashrc
#在PATH中找到可執行檔案程式的路徑。 export PATH =$PATH:$HOME/bin
#gcc找到標頭檔案的路徑 C_INCLUDE_PATH=/usr/include/libxml2:/MyLib export C_INCLUDE_PATH
#g++找到標頭檔案的路徑 CPLUS_INCLUDE_PATH=$CPLUS_INCLUDE_PATH:/usr/include/libxml2:/MyLib export CPLUS_INCLUDE_PATH
#找到動態連結庫的路徑 LD_LIBRARY_PATH=$LD_LIBRARY_PATH:/MyLib export LD_LIBRARY_PATH
#找到靜態庫的路徑 LIBRARY_PATH=$LIBRARY_PATH:/MyLib export LIBRARY_PATH
使用source,載入這些定義使其立即生效;或者重啟
g++編譯時的流程
- 呼叫預編器CPP進行預處理,生成.i檔案
- 呼叫編譯器egcs進行彙編,生成.s檔案
- 調用匯編器as生成目標,.o檔案
- 呼叫聯結器ld進行連結,生成可執行文
g++使用注意項
用於連結庫的 -l 選項必須放在 g++ 選項後面,如:
1 | g++ -o ./tmpExec/pthread pthread.cpp -lpthread |
2 | #這個是正確的 |
3 | g++ -lpthread -o ./tmpExec/pthread pthead.cpp #出錯 |
應該注意的選項
MM選項與M選項
生成檔案的依賴關係,比如:g++ -MM testMM.cpp;將依賴關係輸出到螢幕上,此時應該對其進行重定向;-MM是不會進行語法檢查的。只是對原始檔的include關係進行分析得到依賴關係;如
1 | #include <unistd.h> |
2 | #include "geteth0Ip.h" |
3 |
4 | int mian(){ |
5 | return ; |
6 | } |
7 | //這個漏洞百出的原始檔仍然可以使用-MM獲得它的依賴關係 |
1 | $(dfiles):%.d:%.cpp |
2 | @g++ -MM $< | sed '$ a\\tg++ -c -o $(ObjsDir)/$(patsubst %.d,%.o,[email protected]) $<' >$(DsDir)/[email protected] |
3 | # 使得每一個 .d 檔案都包含著一個完整的規則 |
常用選項
g++ -fsigned-char -o test.exe hello.cpp選項 | 引數 | 描述 | 例子 |
-x | 'c|c++|..|' | 不再根據原始檔的字尾名來判斷編寫原始檔的語言,即指定原始檔的語言 | g++ -x 'c++' test.txt |
-E | 只執行編譯的第一個流程:預處理,不會生成檔案,可以重定向到檔案 | g++ -E test.cpp | |
-S | 執行編譯的前兩個流程生成彙編程式碼 | g++ -S test.cpp | |
-c | 執行前三個流程生成目標檔案 | g++ -c test.cpp | |
-o | 目標檔名 | 重新命名目標檔名 | g++ -S -o test.asm test.cpp |
-pipe | 使用管道來儲存檔案,下一個流程從/tmp/資料夾中讀取上一個流程的結果,使用pipe後,上一個流程將結果儲存在記憶體中,下一個流程直接從記憶體中讀取上一個流程的結果 | g++ -pipe -o test.exe test.cpp | |
-ansi | 關閉gun的特性,使程式碼全面符合ansi要求,從而具有高移植性 | g++ -ansi -o test.ext test.cpp | |
-fno-asm | -ansi的一部分:將asm,inline,typeof視為普通識別符號 | g++ -fno-asm -o test.exe test.cpp | |
-fno-strict-prototype | 不再支援 | ||
-fthis-is-variable | 不再支援 | ||
-fcond-mismatch | 允許條件表示式的第2,3個引數的型別不一致,現已預設開啟 | 預設開啟 | |
-funsigned-char -fno-signed-char -fsigned-char -fno-unsigned-char | 對char型別進行設定,決定將char型別設定成unsigned char(前兩個引數)或者signed char(後兩個引數) | ||
-imacros | 包含巨集的檔案 | 相當於include,可以直接使用引數檔案裡的巨集 | g++ -imacros hello.mac hello.cpp |
-Dmacro -Dmacro=defn | macro為引數 | 相當於#define macro | g++ -DUNICODE -o test.exe hello.cpp |
-Umacro | macro為引數 | 相當於#undef macro,不能取消在文字檔案中定義的巨集! | g++ -UUNICODE -o test.exe hello.cpp |
-undef | 取消對任何非標準巨集的定義 | g++ -undef -o test.exe hello.cpp | |
-Idir | dir就是引數 | 一般查詢標頭檔案順序:-I指定的目錄->當前目錄->環境變數定義的目錄 | g++ -I'C:/Users/Dream/Desktop/' -o test.exe hello.cpp |
-nostdinc | 使編譯器不在系統預設的標頭檔案目錄裡面找標頭檔案 | g++ -nostdinc -o test.exe -c hello.cpp | |
-C | 在預處理的時候,不刪除註釋資訊,一般和-E使用,有時候分析程式,用這個很方便的 | g++ -E -C -o test.h hello.cpp | |
-M | 生成檔案關聯的資訊。包含目標檔案所依賴的所有原始檔,這個在製作makefile應該會很有用 | g++ -M -o test1.h hello.cpp | |
-MM | 同-M,不過忽略#include<file>>造成的依賴關係 | g++ -MM -o test.h hello.cpp | |
-Wa | options | 傳遞引數給as(彙編器) | |
-Wl | options | 傳遞引數為ld(聯結器) | |
-llibs | lib就是引數 | 指定編譯的時候所使用的庫,liblibs.so(如果static選項設定的話就是liblibs.a) | g++ -lprint hello.cpp(連結 libprint.so) |
-Ldir | dir就是引數 | 指定查詢連結庫時的目錄 | g++ -L'C:/Users/Dream/Desktop/' -lprint hello.cpp |
-On | n為引數,表示優化等級取:0,1,2,3 | 進行相應程度的優化 | g++ -O3 -o test3.asm -S hello.cpp |
-g -ggdb -gstabs -gstabe+ | 生成除錯資訊,可以被gdb使用 儘可能地生成gdb格式的除錯資訊 生成stabs格式的除錯資訊 同時shengc stabs,gdb格式的資訊 | g++ -g hello.cpp |
相關推薦
g++/gcc選項
新增執行時共享庫目錄執行使用共享庫的程式需要載入共享庫(不同於G++ 編譯時指定的連結庫),新增共享庫的步驟:修改檔案 /etc/ld.so.conf 新增共享庫目錄執行 ldconfig 同步更新一下如:1gedit /etc/ld.so.conf2#新增 /root/dr
GCC & G++編譯選項
gcc & g++現在是gnu中最主要和最流行的c & c++編譯器 。 g++是c++的命令,以.cpp為主,對於c語言字尾名一般為.c。這時候命令換做gcc即可。其實是無關緊要的。 其實編譯器是根據gcc還是g++來確定是按照C標準還是C++標準編譯連結。
[Linux][2015-03-17] gcc/g++ 編譯選項
GCC的幾個常用選項 gcc常用的編譯選項對程式碼的影響 建立時間:2001-12-21 文章屬性:原創 文章來源:http://xfocus.org/ 文章提交:alert7 (sztcww_at_sina.com) 測試環境 redhat 6
g++/gcc 常見選項。(muduo 編譯小程式舉例)
-g 加入除錯? -o 輸出 -I 加入尋找標頭檔案的路徑。 例如: #include <muduo/net/TimerId.h> /* 如果/usr/include這些系統庫路徑沒有muduo庫的話,我們編譯需要加上“-I muduo庫
gcc 和g++編譯選項詳解
gcc 提供了大量的警告選項,對程式碼中可能存在的問題提出警 告,通常可以使用-Wall來開啟以下警告: -Waddress -Warray-bounds (only with -O2) -Wc++0x-compat -Wchar-subscripts -Wi
解決安裝yum -y install make gcc g++ gcc-c++ libtool autoconf automake imake mysql-devel libxml2-devel expat-devel後無法連接mysql
pan isa linu mage exp aio memory compress bsp 查看mysqld.log 日誌: mysql日誌 171210 19:38:22 [Note] Plugin ‘FEDERATED‘ is disabled. 1712
【親測】<g++/gcc>CentOS下g++: command not found問題的解決(c++環境安裝)
fin define time version csdn cannot result clas 代碼 CentOS下g++: command not found問題的解決 2017年02月27日 18:09:06 閱讀數:5174 標簽: centos
關於cmake 指定g++/gcc 編譯器的問題
CMake是一個開源的跨平臺工具系列,旨在構建,測試和打包軟體。 但是,在使用cmake的時候我們也會經常遇到一些不明白的問題,下面就是使用設定指定的g++/gcc編譯器的一點經驗。 之前在網上搜索如何設定指定編譯器,發現網上的很多教程並沒有說清楚,所以做下簡單的記錄
gcc選項引數詳解
1.gcc包含的c/c++編譯器 gcc,cc,c++,g++,gcc和cc是一樣的,c++和g++是一樣的。一般c程式就用gcc編譯,c++程式就用g++編譯。 2.gcc的基本用法 gcc test.c這樣將編譯出一個名為a.out的程式 gcc test
Failed to fetch http://mirrors.tuna.tsinghua.edu.cn/ubuntu/pool/main/g/gcc-5/g++-5_5.4.0-6ubuntu1~16
今天在ubutun中在安裝redis過程中,安裝gcc時遇到了Failed to fetch http://mirrors.tuna.tsinghua.edu.cn/ubuntu/pool/main/g/gcc-5/g++-5_5.4.0-6ubuntu1~16。 後在/etc/res
GCC選項_-Wl,-soname
http://blog.csdn.net/gohome520/article/details/7259450 -Wl選項告訴編譯器將後面的引數傳遞給連結器。 -soname則指定了動態庫的soname(簡單共享名,Short for shared object nam
poj上 G++ GCC C++編譯器的區別?
Linux 中最重要的軟體開發工具是 GCC。GCC 是 GNU 的 C 和 C++ 編譯器。實際上,GCC 能夠編譯三種語言:C、C++ 和 Object C(C 語言的一種面向物件擴充套件)。利用 gcc 命令可同時編譯並連線 C 和 C++ 源程式。 GCC 可同時用
arm-linux-androideabi-gcc 選項
[email protected]:/home/zhangbin/android/android-ndk-r9/toolchains/arm-linux-androideabi-4.8/prebuilt/linux-x86/bin# ./arm-linux-androideabi-gcc --hel
g++/gcc編譯流程
gcc & g++現在是gnu中最主要和最流行的c & c++編譯器 。 g++是c++的命令,以.cpp為主,對於c語言字尾名一般為.c。 這時候命令換做gcc即可。 本質上都是gnu編譯器集合中的倆個部分 其實編譯器是根據gcc還是g
Makefile中的-Wall -O2 -Os -g等選項介紹
-Wall:選項可以打印出編譯時所有的錯誤或者警告資訊。這個選項很容易被遺忘,編譯的時候,沒有錯誤或者警告提示,以為自己的程式很完美,其實,裡面有可能隱藏著許多陷阱。變數沒有初始化,型別不匹配,或者型
GCC選項-Xlinker和-Wl區別
轉自:http://www.cnblogs.com/rickyk/p/4186902.html 備忘:在一次使用GCC的過程中發現了原來傳遞給連結器ld可以同時使用Xlinker和Wl兩種命令,這兩個命令都可以正確傳遞給ld作為使用,現在總結下兩者的區別。 Xlin
除了vim, 還有哪些常用的牛逼的編輯器。 自行查詢資料, 調研除了gcc, 還有哪些常用的牛逼的編譯器,為什麼除錯的時候需要編譯選項中新增 -g在Linux下實現進度條程式
除了vim, 還有哪些常用的牛逼的編輯器, 並能夠橫向對比編輯器之間的區別和優缺點。 首先先有一個概念IDE(整合開發環境),厲害的有vs等等。vim以及Emacs就向著這個方向發展。為了實現其強大功能。vim有了多模式編輯有(normal,insert,vis
除了vim, 還有哪些常用的牛逼的編輯器,除了gcc, 還有哪些常用的牛逼的編譯器,為什麼除錯的時候需要編譯選項中新增 -g,調研readelf命令,Linux下實現進度條程式.
除了vim, 還有哪些常用的牛逼的編輯器 Brackets Brackets也是一款為Linux開發者設計的開原始碼編輯器,使用Brackets寫程式碼,你不會被任何事情所打斷。比如在寫HTML程式碼時,即便你沒有儲存程式碼也可以及時預覽你的Web頁面效果。你也可以使用T
【轉】gcc/g++常用編譯選項和gdb常用除錯命令
gcc/g++編譯器是我們寫編譯C/C++程式時離不開的編譯工具,而gdb又是除錯C/C++程式的利器,這一篇文章我們記錄一下它們的慣常用法。 gcc/g++常用編譯選項 選項 作
linux gcc g++編譯命令選項
編譯: [[email protected] code]# g++-o test.o d.cpp out.cpp [[email protected] code]# ./test.o1231 [[email protected] code]# 編譯成靜態庫 [[email&