1. 程式人生 > >eclipse封裝動態庫和連結動態庫

eclipse封裝動態庫和連結動態庫

  1. 封裝動態庫

(1)建立Shared Library 工程

建立工程new->project->C Project->Shared Library->Empty Project,之後選擇Linux GCC ,輸入工程名MeLib,最後點選Finish.(此處Shared Library很好理解,建立的動態連結庫目的就是被其他程式所呼叫,因此建立為共享庫)如圖:

https://img-blog.csdn.net/2018100712302012?watermark/2/text/aHR0cHM6Ly9ibG9nLmNzZG4ubmV0L3FxXzM0NjQ3ODMx/font/5a6L5L2T/fontsize/400/fill/I0JBQkFCMA==/dissolve/70

(2)工程實現

建立相應的功能檔案右鍵工程new->Source folder, 輸入檔名此處命名為src,新增要編寫的.c檔案,右鍵src,new->Source file,本文中此處命名為test.c,實現程式碼如下:(此處就是你動態庫.so要實現的功能)

(3)工程配置

配置連結引數右鍵工程,Propertise->C/C++ Build->Settings->GCC C Compiler->Miscellaneous -fPIC勾選上如下:

https://img-blog.csdn.net/20181007131214893?watermark/2/text/aHR0cHM6Ly9ibG9nLmNzZG4ubmV0L3FxXzM0NjQ3ODMx/font/5a6L5L2T/fontsize/400/fill/I0JBQkFCMA==/dissolve/70

-fPIC 作用於編譯階段,告訴編譯器產生與位置無關程式碼。則產生的程式碼中,沒有絕對地址,全部使用相對地址,故而程式碼可以被載入器載入到記憶體的任意位置,都可以正確的執行。這正是共享庫所要求的,共享庫被載入時,在記憶體的位置不是固定的。

(4)工程編譯

點選Build Project 編譯成功之後在Debug目錄裡面生成了libMeLib.so檔案,如下:

https://img-blog.csdn.net/20181007131739599?watermark/2/text/aHR0cHM6Ly9ibG9nLmNzZG4ubmV0L3FxXzM0NjQ3ODMx/font/5a6L5L2T/fontsize/400/fill/I0JBQkFCMA==/dissolve/70

2.連結動態庫

(1)建立工程

建立需要呼叫動態連結庫的工程,new->project->C Project->Executable->Empty Project,輸入工程名test,最後點選Finish

建立相應的功能檔案右鍵工程new->Source folder, 輸入檔名此處命名為src.首先新增我們呼叫的動態連結庫的API介面檔案testh.h這個標頭檔案主要放動態連結庫中封裝的函式的宣告,我們要用這個動態庫時就需要將相應的API標頭檔案載入到工程中,testh.h檔案實現如下:

新增要編寫的.c檔案,右鍵srcnew->Source file

,本文中此處命名為main.c,實現程式碼如下:

(2)新增動態連結庫

新增動態連結庫的路徑,右鍵工程 Propertise->C/C++ Build->Settings->GCC C Linker->Libraries注意是MeLib 不是libMeLib

https://img-blog.csdn.net/20181007133628842?watermark/2/text/aHR0cHM6Ly9ibG9nLmNzZG4ubmV0L3FxXzM0NjQ3ODMx/font/5a6L5L2T/fontsize/400/fill/I0JBQkFCMA==/dissolve/70

(3)修改連結庫路徑

點選執行,會出現以下錯誤:error while loading shared libraries: libShared.so: cannot open shared object file: No such file or directory ,因為系統無法從預設位置找到動態連結庫檔案。修改系統預設搜尋連結庫的路徑,程式即可順利執行,

方法 (在終端下: sudo ldconfig <so檔案的目錄>