GCC 生成動態鏈結庫

2022-03-25 18:28:08 字數 625 閱讀 7437

linux 下動態鏈結庫(shared object file,共享物件檔案)的檔案字尾為.so,它是一種特殊的目標檔案(object file),可以在程式執行時被載入(鏈結)進來。使用動態鏈結庫的優點是:程式的可執行檔案更小,便於程式的模組化以及更新,同時,有效記憶體的使用效率更高。

如果想建立乙個動態鏈結庫,可以使用 gcc 的-shared選項。輸入檔案可以是原始檔、彙編檔案或者目標檔案。

另外還得結合-fpic選項。-fpic 選項作用於編譯階段,告訴編譯器產生與位置無關**(position-independent code);這樣一來,產生的**中就沒有絕對位址了,全部使用相對位址,所以**可以被載入器載入到記憶體的任意位置,都可以正確的執行。這正是共享庫所要求的,共享庫被載入時,在記憶體的位置不是固定的。

例如,從原始檔生成動態鏈結庫:

$ gcc -fpic -shared func.c -o libfunc.so

$ gcc -fpic -c func.c -o func.o

$ gcc -shared func.o -o libfunc.so

-fpic 選項作用於編譯階段,在生成目標檔案時就得使用該選項,以生成位置無關的**。

GCC編譯生成動態鏈結庫 so檔案

動態庫 so在linux下用c和c 程式設計時經常會碰到,最近在 找了幾篇文章介紹動態庫的編譯和鏈結,總算搞懂了這個之前一直不太了解得東東,這裡做個筆記,也為其它正為動態庫鏈結庫而苦惱的兄弟們提供一點幫助。1 動態庫的編譯 下面通過乙個例子來介紹如何生成乙個動態庫。這裡有乙個標頭檔案 so test...

生成動態鏈結庫

fpic pic就是position independent code pic使.so檔案的 段變為真正意義上的共享 如果不加 fpic,則載入.so檔案的 段時,段引用的資料物件需要重定位,重定位會修改 段的內容,這就造成每個使用這個.so檔案 段的程序在核心裡都會生成這個.so檔案 段的copy...

GCC 編譯使用動態鏈結庫

動態鏈結庫 1.建立動態鏈結庫 複製 如下 include void hello 用命令gcc shared hello.c o libhello.so編譯為動態庫。可以看到,當前目錄下多了乙個檔案libhello.so。2.再編輯乙個測試檔案test.c,內容如下 複製 如下 include in...