linux gcc鏈結選項詳解

2021-08-30 21:27:45 字數 1849 閱讀 1756

-i(大寫i) -l(大寫l) -l(小寫l)

(1)-l -i(大寫i)

顯示指定標頭檔案的搜尋路徑。

-i/home/myinclude/ 表示/home/myinclude目錄作為第乙個尋找標頭檔案的目錄,尋找的順序是:

/home/myinclude/

-->

/usr/include --

>

/usr/local/include

(2)

-l(大寫l)

顯示指定程式按照 -l 指定的路徑去尋找庫檔案。

-i/home/lib/ 表示/home/mylib目錄作為第乙個尋找庫檔案的目錄,尋找的順序是:

/home/mylib-->/lib-->/usr/lib-->/usr/local/lib

(3)

-l(小寫)

指定在上述的lib的路徑中尋找*.so動態庫檔案

如-lsqlite3 -lpthread -lcrypto ,-l後面跟著的是動態庫的名字,到上述的lib目錄尋找libsqlite3.so、pthread.so ,crypto.so動態庫檔案。
library_path和ld_library_path是linux下的兩個環境變數,二者的含義和作用分別如下:

library_path環境變數用於在程式編譯期間查詢動態鏈結庫時指定查詢共享庫的路徑,例如,指定gcc編譯需要用到的動態鏈結庫的目錄。設定方法如下(其中,libdir1和libdir2為兩個庫目錄):

export library_path=libdir1:libdir2:$library_path
ld_library_path環境變數用於在程式載入執行期間查詢動態鏈結庫時指定除了系統預設路徑之外的其他路徑,注意,ld_library_path中指定的路徑會在系統預設路徑之前進行查詢。設定方法如下(其中,libdir1和libdir2為兩個庫目錄):

export ld_library_path=libdir1:libdir2:$ld_library_path
在linux下,還可以將動態鏈結目錄加到/etc/ld.so.conf中,在 /etc/ld.so.conf中寫下「想要讀入快取記憶體中的動態函式庫所在的目錄」,注意,是目錄而不是檔案。然後呼叫ldconfig。

動態可執行程式中不包含執行所需的所有函式,linux的動態裝入器負責裝入動態鏈結的可執行程式執行所需的共享庫。

動態裝入器找到共享庫要依靠兩個檔案 — /etc/ld.so.conf 和 /etc/ld.so.cache。

$ cat /etc/ld.so.conf

/usr/x11r6/lib

/usr/lib/gcc-lib/i686-pc-linux-gnu/2.95.3

/usr/lib/mozilla

/usr/lib/qt-x11-2.3.1/lib

/usr/local/lib

ld.so.conf 檔案包含乙個所有目錄(/lib 和 /usr/lib 除外,它們會自動包含在其中)的清單,動態裝入器將在其中查詢共享庫,ld_library_path即是指示動態裝入器首先檢查某個目錄。但是在動態裝入器能「看到」這一資訊之前,必須將它轉換到 ld.so.cache 檔案中。可以通過執行 ldconfig 命令做到這一點:

ldconfig

當 ldconfig 操作結束時,系統生成最新的 /etc/ld.so.cache 檔案,反映出 /etc/ld.so.conf 所做的更改。從這一刻起,動態裝入器在尋找共享庫時會檢視您在 /etc/ld.so.conf 中指定的所有新目錄。

linux gcc編譯選項

1 安全編譯選項 作業系統提供了許多安全機制來嘗試降低或阻止緩衝區溢位攻擊帶來的安全風險,包括dep aslr等。在使用gcc進行編譯時,可以使用gcc的編譯選項來避免堆疊溢位 整數溢位等問題。2 checksec.sh 3 aslr 位址隨機化 aslr address space layout ...

linux gcc引數詳解

版本 0.13 宣告 這篇文件是我的關於 gcc引數的筆記,我很懷念dos年代我用小本子,紀錄所有的dos 命令的引數.哈哈,下面的東西可能也不是很全面,我參考了很多的書,和gcc的幫助.不全的原因是,有可能我還沒有看到這個引數,另一種原因是,我可能還不會用它 不過,我會慢慢的補齊的.哈哈如果你要轉...

鏈結選項 I, l, L, Wl rpath

首先這幾個命令一般用在gcc g 或makefile中,但是一般的ide裡也會涉及。只是在ide裡的配置方式會不同,有的是配置檔案如qtcreator,有的是圖形化介面,如codeblocks。無論是什麼樣的方式其本質都是一樣的,尤其是配乙個工程的時候,這些都是必不可少的。i,新增包含路徑 i 在編...