詳解 linux c++的編譯器g++的基本使用
linux c++的編譯器g++基本使用
g++是 linux下c++的編譯器,在執(zhí)行編譯工作的時候,總共需要4步
1.預(yù)處理,生成.i的文件
2.將預(yù)處理后的文件不轉(zhuǎn)換成匯編語言,生成文件.s
3.有匯編變?yōu)槟繕?biāo)代碼(機(jī)器代碼)生成.o的文件
4.連接目標(biāo)代碼,生成可執(zhí)行程序
g++ 編譯c++經(jīng)常使用的參數(shù):
-c
只編譯,不連接。例如: g++ -c helloworld.cpp
只生成helloworld.o不連接
-o
指定輸出文件名。例如:g++ -c helloworld.cpp -o abc.o
默認(rèn)是生成helloworld.o,用-o abc.o以后,就生成的是abc.o
-I
附加一個包函頭文件的路徑。例如:g++ helloworld.cpp -I"/usr/helloworld/include"
-l
小的L, 附一個庫,例如要使用libabc.so 就g++ helloworld.cpp -labc
-L
添加一個庫的路徑,例如 g++ hello.cpp -L"/usr/hello/lib" -labc
-shared
生成動態(tài)庫文件,例如: g++ -shared hellp.cpp -o libhello.so
調(diào)用動態(tài)庫的時候有幾個問題會經(jīng)常碰到,有時,明明已經(jīng)將庫的頭文件所在目錄通過include進(jìn)來了,庫所在文件通過 “-L”參數(shù)引導(dǎo),并指定了“-l”的庫名,但通過ldd命令察看時,就是死活找不到你指定鏈接的so文件。其實編譯鏈接上了共享庫不代表執(zhí)行時可以找到。所以“-L”什么的對執(zhí)行沒有用,你需要指明共享庫的路徑。方法有三個:
a.修改 LD_LIBRARY_PATH,指明共享庫的路徑。LD_LIBRARY_PATH:這個環(huán)境變量指示動態(tài)連接器可以裝載動態(tài)庫的路徑。在終端下使用如下命令:
[root@localhost sharelib]# export LD_LIBRARY_PATH = . [root@localhost sharelib]# export LD_LIBRARY_PATH = your lib dir export
b.通過/etc/ld.so.conf文件來指定動態(tài)庫的目錄。然后運行l(wèi)dconfig命令更新搜索共享庫的路徑。通常這個做法就可以解決庫無法鏈接的問題并且一勞永逸。
c.或者把庫文件拷貝到/lib下,然后ldconfig就ok了。這個方法有的取巧,且破壞原庫文件的純潔性,不應(yīng)是首選方法。
修改/etc/ld.so.conf文件,然后調(diào)用 /sbin/ldconfig需要有root權(quán)限,如果沒有root權(quán)限,那么只能采用輸出LD_LIBRARY_PATH的方法了。
linux下文件的類型是不依賴于其后綴名的,但一般來講:
.o,是目標(biāo)文件,相當(dāng)于windows中的.obj文件
.so 為共享庫,是shared object,用于動態(tài)連接的,和dll差不多
.a為靜態(tài)庫,是好多個.o合在一起,用于靜態(tài)連接
.la為libtool自動生成的一些共享庫,主要記錄了一些配置信息。
感謝閱讀,希望能幫助到大家,謝謝大家對本站的支持!
上一篇:C++11新特性中auto 和 decltype 區(qū)別和聯(lián)系
欄 目:C語言
本文標(biāo)題:詳解 linux c++的編譯器g++的基本使用
本文地址:http://mengdiqiu.com.cn/a1/Cyuyan/1784.html
您可能感興趣的文章
- 04-02c語言沒有round函數(shù) round c語言
- 01-10求子數(shù)組最大和的解決方法詳解
- 01-10深入二叉樹兩個結(jié)點的最低共同父結(jié)點的詳解
- 01-10數(shù)據(jù)結(jié)構(gòu)課程設(shè)計- 解析最少換車次數(shù)的問題詳解
- 01-10數(shù)據(jù)結(jié)構(gòu)課程設(shè)計-用棧實現(xiàn)表達(dá)式求值的方法詳解
- 01-10HDOJ 1443 約瑟夫環(huán)的最新應(yīng)用分析詳解
- 01-10深入理解C++中常見的關(guān)鍵字含義
- 01-10使用C++實現(xiàn)全排列算法的方法詳解
- 01-10如何查看進(jìn)程實際的內(nèi)存占用情況詳解
- 01-10深入Main函數(shù)中的參數(shù)argc,argv的使用詳解


閱讀排行
本欄相關(guān)
- 04-02c語言函數(shù)調(diào)用后清空內(nèi)存 c語言調(diào)用
- 04-02func函數(shù)+在C語言 func函數(shù)在c語言中
- 04-02c語言的正則匹配函數(shù) c語言正則表達(dá)
- 04-02c語言用函數(shù)寫分段 用c語言表示分段
- 04-02c語言中對數(shù)函數(shù)的表達(dá)式 c語言中對
- 04-02c語言編寫函數(shù)冒泡排序 c語言冒泡排
- 04-02c語言沒有round函數(shù) round c語言
- 04-02c語言分段函數(shù)怎么求 用c語言求分段
- 04-02C語言中怎么打出三角函數(shù) c語言中怎
- 04-02c語言調(diào)用函數(shù)求fibo C語言調(diào)用函數(shù)求
隨機(jī)閱讀
- 04-02jquery與jsp,用jquery
- 01-10C#中split用法實例總結(jié)
- 08-05DEDE織夢data目錄下的sessions文件夾有什
- 01-11Mac OSX 打開原生自帶讀寫NTFS功能(圖文
- 01-10delphi制作wav文件的方法
- 01-10使用C語言求解撲克牌的順子及n個骰子
- 01-10SublimeText編譯C開發(fā)環(huán)境設(shè)置
- 08-05dedecms(織夢)副欄目數(shù)量限制代碼修改
- 01-11ajax實現(xiàn)頁面的局部加載
- 08-05織夢dedecms什么時候用欄目交叉功能?