g++ 選項含義

g++: c++的編譯器.cc,c++文件最好還是用g++,有時會出現undefined symbol: __gxx_personality_v0 這樣的錯誤。

cc和cpp的區別:c++文件,除了Unix系統外,其他的平臺上,C++文件的後綴名基本上都是 *.cpp。

-Wl,-rpath:gcc編譯鏈接動態庫時,很有可能編譯通過,但是執行時,找不到動態鏈接庫,(如果用ldd -r 命令查看動態庫的依賴 項,會出現類似的提示:libpython3.6m.so.1.0 => not found)那是因爲-L選項指定的路徑只在編譯時有效,編譯出來的可執行文件不知道-L選項後面的值,這時需要用該指令記錄動態庫的位置。

-rdynamic: 用來通知鏈接器將所有符號添加到動態符號表中,程序動態調用動態庫中的函數,編譯時用到該選項,通常和-ldl一起用。

-I:指定頭文件路徑。

-lpthread: 鏈接線程庫。

-lm:鏈接數學庫。

-ldl:鏈接dl庫。

-o: 表示編譯並鏈接 所有依賴文件。

-c: 表示只編譯不鏈接。

-g: 表示帶調試信息。

-std=c++11。

-w:的意思是關閉編譯時的警告,也就是編譯後不顯示任何warning。

-Wall:編譯後顯示所有警告。

-Wno-sign-compare: 關閉當有符號轉換爲無符號時,有符號和無符號值比較產生的錯誤警告。

-Wno-unused-local-typedefs:忽略本地未使用的類型定義警告。

-Wno-deprecated-declarations:關閉使用廢棄API的警告。

-Winit-self:自己初始化自己的警告。

-msse:讓編譯器使用cpu的sse指令集,可以使用mmx寄存器計算單精度浮點運算。

-msse2:讓編譯器使用奔騰cpu的指令集,可以使用mmx寄存器計算雙精度浮點運算。

-pthread:多線程。

-DKALDI_DOUBLEPRECISION=0

-DHAVE_EXECINFO_H=1

-DHAVE_CXXABI_H

-DHAVE_ATLAS

-------------------------------------------------------------------------------------------------------------------

-------------------------------------------------------------------------------------------------------------------------------------

識別源碼最終編譯指令(鏈接的靜態庫):

g++ -std=c++11 -I.. -I/usr/wxf/kaldi/tools/openfst/include -Wno-sign-compare -Wall -Wno-sign-compare -Wno-unused-local-typedefs -Wno-deprecated-declarations -Winit-self -DKALDI_DOUBLEPRECISION=0 -DHAVE_EXECINFO_H=1 -DHAVE_CXXABI_H -DHAVE_ATLAS -I/usr/wxf/kaldi/tools/ATLAS/include -msse -msse2 -pthread -g    -Wl,-rpath=/usr/wxf/kaldi/tools/openfst/lib -rdynamic  recognition.cc ../hmm/kaldi-hmm.a ../ivector/kaldi-ivector.a ../feat/kaldi-feat.a ../transform/kaldi-transform.a ../gmm/kaldi-gmm.a ../tree/kaldi-tree.a ../util/kaldi-util.a ../matrix/kaldi-matrix.a ../base/kaldi-base.a   /usr/wxf/kaldi/tools/openfst/lib/libfst.so /usr/lib64/atlas/libsatlas.so.3 /usr/lib64/atlas/libtatlas.so.3 -Wl,-rpath=/usr/lib64/atlas -lm -lpthread -ldl -o recognition



發佈了55 篇原創文章 · 獲贊 18 · 訪問量 8萬+
發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章