Liunx gcc g 動態鏈結庫鏈結和呼叫

2021-10-03 20:54:06 字數 1114 閱讀 2175

-l 、-l、-include、-i、-shared、-fpic

-l :表示要鏈結的庫所在的目錄。-l.  表示要鏈結的庫在當前目錄, -l/usr/lib 表

示要連線的庫在/usr/lib下。目錄在/usr/lib時,系統會自動搜尋這個目錄,可以不用

指明。-l (l的小寫):表示需要鏈結庫的名稱,注意不是庫檔名稱,比如庫檔案為 libtest.so,那麼庫名稱為test

-include :包含標頭檔案,這個很少用,因為一般情況下在原始碼中,都有指定標頭檔案。

-i (i 的大寫):指定標頭檔案的所在的目錄,可以使用相對路徑。

動態載入時事通過**拷貝的方式來滿足不同程序的需要,而不能達到真正**共享的目的

1.生成動態庫

g++  test.cpp -fpic -shared -o libtest.so
必須以lib開頭庫名稱中間.so結尾規範命名庫

執行完會生成乙個 libtest.so 的動態庫檔案

2.呼叫動態庫

test動態庫在test資料夾下

g++ main.cpp -o main -i .

./test/

-l..

/ test -ltest

執行會發現報錯

.

/main: error while loading shared libraries: libperson.so:

cannot open shared object file: no such file or directory

原因是沒有指定庫檔案路徑

解決方法

1.把.so庫考到執行檔案目錄中

2.通過執行指令碼方式

export ld_library_path=..

/person

最後是使用ldd main命令檢視動態庫的鏈結

本文部分內容來自:surgewong 的文章

動態鏈結庫 靜態鏈結庫

包含標頭檔案和庫 idir 指定編譯查詢標頭檔案的目錄,常用於查詢第三方的庫的標頭檔案,例 gcc test.c i.inc o test。ldir 指定鏈結時查詢lib的目錄,常用於查詢第三方庫。llibrary 指定額外鏈結的lib庫 巨集定義 dmacro 以字串 1 預設值 定義 macro...

靜態鏈結庫 動態鏈結庫

庫是寫好的現有的,成熟的,可以復用的 現實中每個程式都要依賴很多基礎的底層庫,不可能每個人的 都從零開始,因此庫的存在意義非同尋常。本質上來說庫是一種可執行 的二進位制形式,可以被作業系統載入記憶體執行。庫有兩種 靜態庫 a lib 和動態庫 so dll windows上對應的是.lib dll ...

靜態鏈結庫,動態鏈結庫

關於靜態鏈結庫,參考如下博文 當你完成了 開發,想把這個 給別人用,但是又不希望別人看到原始碼,就要給別人乙個庫和標頭檔案,庫和標頭檔案是配合的,缺一不可。或者過程相反,你從別人那裡拿到乙個庫和標頭檔案來使用。那麼如何編譯生成乙個庫給他人,如何使用從他人那裡拿到的庫呢?範例1 我們想把linuxfr...