eclipse封裝動態庫和連結動態庫
-
封裝動態庫
(1)建立Shared Library 工程
建立工程new->project->C Project->Shared Library->Empty Project,之後選擇Linux GCC ,輸入工程名MeLib,最後點選Finish.(此處Shared Library很好理解,建立的動態連結庫目的就是被其他程式所呼叫,因此建立為共享庫)如圖:
(2)工程實現
建立相應的功能檔案右鍵工程new->Source folder, 輸入檔名此處命名為src,新增要編寫的.c檔案,右鍵src,new->Source file,本文中此處命名為test.c,實現程式碼如下:(此處就是你動態庫.so要實現的功能)
(3)工程配置
配置連結引數右鍵工程,Propertise->C/C++ Build->Settings->GCC C Compiler->Miscellaneous, 將-fPIC勾選上如下:
-fPIC 作用於編譯階段,告訴編譯器產生與位置無關程式碼。則產生的程式碼中,沒有絕對地址,全部使用相對地址,故而程式碼可以被載入器載入到記憶體的任意位置,都可以正確的執行。這正是共享庫所要求的,共享庫被載入時,在記憶體的位置不是固定的。
(4)工程編譯
點選Build Project 編譯成功之後在Debug目錄裡面生成了libMeLib.so檔案,如下:
2.連結動態庫
(1)建立工程
建立需要呼叫動態連結庫的工程,new->project->C Project->Executable->Empty Project,輸入工程名test,最後點選Finish。
建立相應的功能檔案右鍵工程new->Source folder, 輸入檔名此處命名為src.首先新增我們呼叫的動態連結庫的API介面檔案testh.h這個標頭檔案主要放動態連結庫中封裝的函式的宣告,我們要用這個動態庫時就需要將相應的API標頭檔案載入到工程中,testh.h檔案實現如下:
新增要編寫的.c檔案,右鍵src,new->Source file
(2)新增動態連結庫
新增動態連結庫的路徑,右鍵工程 ,Propertise->C/C++ Build->Settings->GCC C Linker->Libraries,注意是MeLib 不是libMeLib
(3)修改連結庫路徑
點選執行,會出現以下錯誤:error while loading shared libraries: libShared.so: cannot open shared object file: No such file or directory ,因為系統無法從預設位置找到動態連結庫檔案。修改系統預設搜尋連結庫的路徑,程式即可順利執行,
方法 (在終端下: sudo ldconfig <放so檔案的目錄>)