GCC详解的-Wl选项说明与测试
在GCC編譯程序時,由于GCC命令不僅能夠編譯,也能夠鏈接程序,GCC鏈接程序是通過ld命令實現。那如何將GCC的命令行參數傳遞給ld命令呢。通常在編譯時通過使用-Wl這個選項來實現的。
測試例程
測試例程如下:(libc.so.6是復制/lib下到當前路徑下)
編譯
??gcc?-o?test?test.c?-I.?-L.?-lc?-Wl,-rpath=.???其中
-I. 是指定頭文件路徑為當前目錄下;
-L. 是指定庫文件路徑為當前目錄下;
-lc 是從-L指定庫文件路徑下去找libc.so.6這個庫,也就是庫名砍頭去尾(類似使用過-lpthread)
-Wl,-rpath=. 為告訴編譯器將后面的參數傳遞給鏈接器>
-Wl,其格式如下:
??gcc?-Wl,param1,param2,param3,...在調用ld命令時,會等效于如下:
??ld?param1?param2?param3?注意:-Wl, 后的逗號(,)必不可少,如果要傳遞多個參數,參數之間間用逗號,分隔
-Wl,-Bstatic
指定后續ld在處理 -l 參數來鏈接庫文件的鏈接方式首選靜態庫
-Wl,-Bdynamic
指定后續ld在處理 -l 參數來鏈接庫文件的鏈接方式首選動態庫
例如: -Wl,-Bstatic -la -lb -lc -Wl,-Bdynamic -ld -le
會被解釋成 :ld liba.a libb.a libc.a libd.so libe.so
-Wl,-rpath -Wl,/home/yimning/linux/rpatch_test/
會被解釋成:ld -rpath /home/yimning/linux/rpatch_test/
查看關聯庫指向與rpatch(編譯之后)
此時查看libc.so.6的依賴庫路徑變為./libc.so.6
查看test的文件信息如下這一行:
0x000000000000001d (RUNPATH) Library runpath: [.]
總結
以上是生活随笔為你收集整理的GCC详解的-Wl选项说明与测试的全部內容,希望文章能夠幫你解決所遇到的問題。
- 上一篇: MFC设置字体的大小、下划线等内容
- 下一篇: 斐讯携手思科建设数据中心 驱动区块链业务