GCC详解的-Wl选项说明与测试
在GCC編譯程序時(shí),由于GCC命令不僅能夠編譯,也能夠鏈接程序,GCC鏈接程序是通過(guò)ld命令實(shí)現(xiàn)。那如何將GCC的命令行參數(shù)傳遞給ld命令呢。通常在編譯時(shí)通過(guò)使用-Wl這個(gè)選項(xiàng)來(lái)實(shí)現(xiàn)的。
測(cè)試?yán)?/p>
測(cè)試?yán)倘缦?#xff1a;(libc.so.6是復(fù)制/lib下到當(dāng)前路徑下)
編譯
??gcc?-o?test?test.c?-I.?-L.?-lc?-Wl,-rpath=.???其中
-I. 是指定頭文件路徑為當(dāng)前目錄下;
-L. 是指定庫(kù)文件路徑為當(dāng)前目錄下;
-lc 是從-L指定庫(kù)文件路徑下去找libc.so.6這個(gè)庫(kù),也就是庫(kù)名砍頭去尾(類似使用過(guò)-lpthread)
-Wl,-rpath=. 為告訴編譯器將后面的參數(shù)傳遞給鏈接器>
-Wl,其格式如下:
??gcc?-Wl,param1,param2,param3,...在調(diào)用ld命令時(shí),會(huì)等效于如下:
??ld?param1?param2?param3?注意:-Wl, 后的逗號(hào)(,)必不可少,如果要傳遞多個(gè)參數(shù),參數(shù)之間間用逗號(hào),分隔
-Wl,-Bstatic
指定后續(xù)ld在處理 -l 參數(shù)來(lái)鏈接庫(kù)文件的鏈接方式首選靜態(tài)庫(kù)
-Wl,-Bdynamic
指定后續(xù)ld在處理 -l 參數(shù)來(lái)鏈接庫(kù)文件的鏈接方式首選動(dòng)態(tài)庫(kù)
例如: -Wl,-Bstatic -la -lb -lc -Wl,-Bdynamic -ld -le
會(huì)被解釋成 :ld liba.a libb.a libc.a libd.so libe.so
-Wl,-rpath -Wl,/home/yimning/linux/rpatch_test/
會(huì)被解釋成:ld -rpath /home/yimning/linux/rpatch_test/
查看關(guān)聯(lián)庫(kù)指向與rpatch(編譯之后)
此時(shí)查看libc.so.6的依賴庫(kù)路徑變?yōu)?/libc.so.6
查看test的文件信息如下這一行:
0x000000000000001d (RUNPATH) Library runpath: [.]
總結(jié)
以上是生活随笔為你收集整理的GCC详解的-Wl选项说明与测试的全部?jī)?nèi)容,希望文章能夠幫你解決所遇到的問(wèn)題。
- 上一篇: MFC设置字体的大小、下划线等内容
- 下一篇: MySQL数据库文件转化为Word表格做