詳解 linux c++的編譯器g++的基本使用
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è)問(wèn)題會(huì)經(jīng)常碰到,有時(shí),明明已經(jīng)將庫(kù)的頭文件所在目錄通過(guò)include進(jìn)來(lái)了,庫(kù)所在文件通過(guò) “-L”參數(shù)引導(dǎo),并指定了“-l”的庫(kù)名,但通過(guò)ldd命令察看時(shí),就是死活找不到你指定鏈接的so文件。其實(shí)編譯鏈接上了共享庫(kù)不代表執(zhí)行時(shí)可以找到。所以“-L”什么的對(duì)執(zhí)行沒(méi)有用,你需要指明共享庫(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.通過(guò)/etc/ld.so.conf文件來(lái)指定動(dòng)態(tài)庫(kù)的目錄。然后運(yùn)行l(wèi)dconfig命令更新搜索共享庫(kù)的路徑。通常這個(gè)做法就可以解決庫(kù)無(wú)法鏈接的問(wèn)題并且一勞永逸。
c.或者把庫(kù)文件拷貝到/lib下,然后ldconfig就ok了。這個(gè)方法有的取巧,且破壞原庫(kù)文件的純潔性,不應(yīng)是首選方法。
修改/etc/ld.so.conf文件,然后調(diào)用 /sbin/ldconfig需要有root權(quán)限,如果沒(méi)有root權(quán)限,那么只能采用輸出LD_LIBRARY_PATH的方法了。
linux下文件的類型是不依賴于其后綴名的,但一般來(lái)講:
.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ì)本站的支持!
相關(guān)文章
C語(yǔ)言深入講解棧與堆和靜態(tài)存儲(chǔ)區(qū)的使用
對(duì)大多數(shù)C 語(yǔ)言初學(xué)者來(lái)說(shuō),堆棧卻是一個(gè)很模糊的概念。堆棧是一種數(shù)據(jù)結(jié)構(gòu),一個(gè)在程序運(yùn)行時(shí)用于存放的地方,相信這可能是很多初學(xué)者共同的認(rèn)識(shí),靜態(tài)存儲(chǔ)區(qū)即內(nèi)存在程序編譯的時(shí)候就已經(jīng)分配好,這塊內(nèi)存在程序的整個(gè)運(yùn)行期間都存在2022-04-04
C++實(shí)現(xiàn)LeetCode(159.最多有兩個(gè)不同字符的最長(zhǎng)子串)
這篇文章主要介紹了C++實(shí)現(xiàn)LeetCode(159.最多有兩個(gè)不同字符的最長(zhǎng)子串),本篇文章通過(guò)簡(jiǎn)要的案例,講解了該項(xiàng)技術(shù)的了解與使用,以下就是詳細(xì)內(nèi)容,需要的朋友可以參考下2021-07-07
C++中的數(shù)字轉(zhuǎn)字符串to_string
這篇文章主要介紹了C++中的數(shù)字轉(zhuǎn)字符串to_string,具有很好的參考價(jià)值,希望對(duì)大家有所幫助。如有錯(cuò)誤或未考慮完全的地方,望不吝賜教2022-11-11
ubunt18.04LTS+vscode+anaconda3下的python+C++調(diào)試方法
這篇文章主要介紹了ubunt18.04LTS+vscode+anaconda3下的python+C++調(diào)試方法,本文給大家介紹的非常詳細(xì),對(duì)大家的學(xué)習(xí)或工作具有一定的參考借鑒價(jià)值,需要的朋友可以參考下2020-03-03
MATLAB全網(wǎng)最全的colormap的使用教程詳解
眾所周知,MATLAB中的colormap只有少得可憐的幾種,有很多應(yīng)用在很特殊的圖形中的colormap幾乎都沒(méi)有,而每次寫代碼都要去找顏色的圖屬實(shí)太麻煩。所以本文將包全部集成了進(jìn)來(lái),終于有了這套包含200個(gè)colormap的工具函數(shù),希望對(duì)大家有所幫助2023-02-02
C語(yǔ)言實(shí)現(xiàn)醫(yī)院管理系統(tǒng)
這篇文章主要為大家詳細(xì)介紹了C語(yǔ)言實(shí)現(xiàn)醫(yī)院管理系統(tǒng),具有一定的參考價(jià)值,感興趣的小伙伴們可以參考一下2018-12-12

