1. 程式人生 > >linux下使用eclipse編譯、連結、動態庫的學習筆記

linux下使用eclipse編譯、連結、動態庫的學習筆記

 一、建立動態連結庫

    1、建立工程new->project->c++ project選擇Shared Library->Empty Project.輸入工程名MySharedLib,點選finish,完成工程的建立。

  2. 庫程式碼的編寫

2.1.testa.cpp

  1. #include <stdio.h>
  2. void Test_a()  
  3. {  
  4.   printf("This is Test_a!");  
  5. }  
2.2. testb.cpp
  1. #include <stdio.h>
  2. void Test_b()  
  3. {  
  4.   printf("This is Test_b!");  
  5. }  

2.3. testc.cpp
  1. #include <stdio.h>
  2. void Test_c()  
  3. {  
  4.   printf("This is Test_c!");  
  5. }  

 
2.4、API介面檔案

 testh.h

  1. void Test_a();  
  2. void Test_b();  
  3. void Test_c();  

編寫程式碼在windows下封裝動態連結庫時對要封的函式要用__declspec(dllexport)來標明,在linux下不用,在linux下只需要直接把要封的函式的宣告放到一個API標頭檔案(.h檔案)

中,要用這個庫時將相應的API標頭檔案(.h檔案)載入到工程中。  

    3、生成動態連結庫編譯程式碼,成功後在Debug目錄下會生成libMySharedLib.so檔案。


二、動態連結庫的使用

1、建立工程new->c++ project->Executable->Empty Project.工程名為TestLib

2、編寫所需程式碼,並將相應的API標頭檔案(.h檔案)放到工程目錄下並載入到工程中。

 main.cpp

  1. #include "testh.h"
  2. int main()  
  3. {  
  4.   Test_a();  
  5.   Test_b();  
  6.   Test_c();  
  7.   return 0;  
  8. }  

3、加入動態連結庫libMySharedLib.so右鍵工程Properites->C/C++ Build->Settings,然後如下圖


注意最右邊,庫的名稱libMySharedLib.so變為MySharedLib,庫的路徑就寫這個庫所在的路徑。


4、修改環境變數。

  以上均做正確的話編譯連結是能通過的,但是在執行時會報錯error while loading shared libraries: libShared.so: cannot open shared object file: No such file or directory ,這時需要修改環境變數。在工程處右鍵,Run As->Run Configurations,選擇Environment,如下圖:

 

  新加一個環境變數,名稱必需是 LD_LIBRARY_PATH,值為動態連結庫所在的路徑。

  以上就完成了linux下生成動態連結庫和使用動態連結庫。

5. 執行結果