運行使用共享庫的程序須要加載共享庫(不一樣於G++ 編譯時指定的連接庫),添加共享庫的步驟:c++
修改文件 /etc/ld.so.conf 添加共享庫目錄bash
運行 ldconfig 同步更新一下優化
如:this
$ gedit /etc/ld.so.conf #添加 /root/dreamlove/lib $ ldconfig
對全部用戶有效修改/etc/profile
對我的有效則修改~/.bashrc
#在PATH中找到可執行文件程序的路徑。spa
export PATH =$PATH:$HOME/bin
#gcc找到頭文件的路徑.net
C_INCLUDE_PATH=/usr/include/libxml2:/MyLib export C_INCLUDE_PATH
#g++找到頭文件的路徑 prototype
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
#找到靜態庫的路徑 code
LIBRARY_PATH=$LIBRARY_PATH:/MyLib export LIBRARY_PATH
使用source,加載這些定義使其當即生效;或者重啓xml
用於連接庫的 -l 選項必須放在 g++ 選項後面,如:
$ g++ -o ./tmpExec/pthread pthread.cpp -lpthread #這個是正確的 $ g++ -lpthread -o ./tmpExec/pthread pthead.cpp #出錯
MM選項與M選項
生成文件的依賴關係,好比:g++ -MM testMM.cpp;將依賴關係輸出到屏幕上,此時應該對其進行重定向;-MM是不會進行語法檢查的。只是對源文件的include關係進行分析獲得依賴關係;如
#include <unistd.h> #include "geteth0Ip.h" int mian(){ return; } //這個漏洞百出的源文件仍然可使用-MM得到它的依賴關係
與 makefile 的使用:
$(dfiles):%.d:%.cpp @g++ -MM $< | sed '$ a\\tg++ -c -o $(ObjsDir)/$(patsubst %.d,%.o,$@) $<' >$(DsDir)/$@ # 使得每個 .d 文件都包含着一個完整的規則
選項 | 參數 | 描述 | 例子 |
-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 |