g++基础知识
一、編譯過程:
1)預(yù)處理,生成.i文件
2)轉(zhuǎn)換成為匯編語言,生成.s文件
3)匯編變?yōu)槟繕?biāo)代碼(機(jī)器代碼),生成.o文件
4)鏈接目標(biāo)代碼,生成可執(zhí)行程序。 二、常用編譯選項(xiàng)
tips:選項(xiàng)必須獨(dú)立給出:‘-pg’和‘-p -g’完全不同 -c:編譯或匯編源文件,不做連接。
G++ -c test.cpp輸出test.o -o file:制定輸出文件為file -Wall: 輸出所有編譯警告(最好加上) -Dmacro=XXX:定義宏。 -shared:生成一個(gè)共享庫文件
g++ -shared -o libtest.so test.o -fPIC:生成位置無關(guān)目標(biāo)代碼,適用于動態(tài)連接。 -llibrarytest:連接名字為librarytest的庫
真正名字是liblibrarytest.so(a) so是動態(tài)庫,a是靜態(tài)庫。
嚴(yán)格按照文件名搜索,版本號要創(chuàng)建軟連接。
編譯搜索目錄:
用戶-L指定, LIBRARY_PATH,系統(tǒng)目錄/lib /usr/lib
運(yùn)行搜索目錄:
LD_LIBRARY_PATH,ld.so.cache & /etc/ld.so.conf ,系統(tǒng)目錄 /lib /usr/lib
動態(tài)庫和靜態(tài)庫同名,優(yōu)先動態(tài)庫。 -Ldir:添加庫文件搜索路徑 -Idir(include):添加頭文件搜索路徑 -g:產(chǎn)生調(diào)試信息 -olevel:優(yōu)化級別,一般用o2 三、靜態(tài)庫、共享庫
靜態(tài)庫:一些.o文件打包,在被連接后成為程序的一部分。
編譯方法
-g++ -c test.cpp
-ar res libtest.a test.o
鏈接方法:
-g++ -Wall -o test testMain.cpp -ltest -L./ 共享庫:鏈接的時(shí)候不會被復(fù)制到程序中。
編譯方法:
g++ -c fPIC test.cpp
//要動態(tài) g++ -shared -WI, -soname, libtest.so, -o libtest.so.1.0.1 test.o
mv libtest.so.1.0.1 /usr/lib
sudo ldconfig & || ll /user/lib/libtest.so //創(chuàng)建一個(gè)軟連接。
鏈接方法:
g++ -o test test.cpp ./libtest.so -ldx_cxx 四、常用命令
ldd:顯示程序依賴的同臺共享庫。
file:查看文件格式信息。
ldconfig:在搜尋目錄下搜索出可以共享的動態(tài)鏈接庫
總結(jié)
- 上一篇: traceroute命令的用法实例
- 下一篇: CentOS6.3 重启后/etc/re