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万+
發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章