溫馨提示×

您好,登錄后才能下訂單哦!

密碼登錄×
登錄注冊(cè)×
其他方式登錄
點(diǎn)擊 登錄注冊(cè) 即表示同意《億速云用戶服務(wù)條款》

詳解 linux c++的編譯器g++的基本使用

發(fā)布時(shí)間:2020-10-19 13:32:01 來源:腳本之家 閱讀:274 作者:lqh 欄目:編程語(yǔ)言

linux c++的編譯器g++基本使用

g++是 linux下c++的編譯器,在執(zhí)行編譯工作的時(shí)候,總共需要4步

1.預(yù)處理,生成.i的文件
2.將預(yù)處理后的文件不轉(zhuǎn)換成匯編語(yǔ)言,生成文件.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è)包函頭文件的路徑。例如:g++ helloworld.cpp -I"/usr/helloworld/include"

-l

小的L, 附一個(gè)庫(kù),例如要使用libabc.so 就g++ helloworld.cpp -labc

-L

添加一個(gè)庫(kù)的路徑,例如 g++ hello.cpp -L"/usr/hello/lib" -labc

-shared

生成動(dòng)態(tài)庫(kù)文件,例如: g++ -shared hellp.cpp -o libhello.so

        調(diào)用動(dòng)態(tài)庫(kù)的時(shí)候有幾個(gè)問題會(huì)經(jīng)常碰到,有時(shí),明明已經(jīng)將庫(kù)的頭文件所在目錄通過include進(jìn)來了,庫(kù)所在文件通過 “-L”參數(shù)引導(dǎo),并指定了“-l”的庫(kù)名,但通過ldd命令察看時(shí),就是死活找不到你指定鏈接的so文件。其實(shí)編譯鏈接上了共享庫(kù)不代表執(zhí)行時(shí)可以找到。所以“-L”什么的對(duì)執(zhí)行沒有用,你需要指明共享庫(kù)的路徑。方法有三個(gè):

        a.修改 LD_LIBRARY_PATH,指明共享庫(kù)的路徑。LD_LIBRARY_PATH:這個(gè)環(huán)境變量指示動(dòng)態(tài)連接器可以裝載動(dòng)態(tài)庫(kù)的路徑。在終端下使用如下命令:

[root@localhost sharelib]# export LD_LIBRARY_PATH = .
[root@localhost sharelib]# export LD_LIBRARY_PATH = your lib dir export

       b.通過/etc/ld.so.conf文件來指定動(dòng)態(tài)庫(kù)的目錄。然后運(yùn)行l(wèi)dconfig命令更新搜索共享庫(kù)的路徑。通常這個(gè)做法就可以解決庫(kù)無法鏈接的問題并且一勞永逸。

       c.或者把庫(kù)文件拷貝到/lib下,然后ldconfig就ok了。這個(gè)方法有的取巧,且破壞原庫(kù)文件的純潔性,不應(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 為共享庫(kù),是shared object,用于動(dòng)態(tài)連接的,和dll差不多
.a為靜態(tài)庫(kù),是好多個(gè).o合在一起,用于靜態(tài)連接
.la為libtool自動(dòng)生成的一些共享庫(kù),主要記錄了一些配置信息。

感謝閱讀,希望能幫助到大家,謝謝大家對(duì)本站的支持!

向AI問一下細(xì)節(jié)

免責(zé)聲明:本站發(fā)布的內(nèi)容(圖片、視頻和文字)以原創(chuàng)、轉(zhuǎn)載和分享為主,文章觀點(diǎn)不代表本網(wǎng)站立場(chǎng),如果涉及侵權(quán)請(qǐng)聯(lián)系站長(zhǎng)郵箱:is@yisu.com進(jìn)行舉報(bào),并提供相關(guān)證據(jù),一經(jīng)查實(shí),將立刻刪除涉嫌侵權(quán)內(nèi)容。

AI