linux gcc鏈接選項詳解

-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 與ld.so.conf

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 中指定的所有新目錄。

發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章