一個簡單例子教會你C++動態庫的用法

碼農談IT發表於2023-12-05

來源:DBA札記

在 Linux 下使用 C++ 建立和使用動態庫(通常是 .so 檔案,即 Shared Object)包含幾個關鍵步驟:建立動態庫、編譯、連結,以及在應用程式中使用這個庫。下面是一個簡要的指南:

1. 建立動態庫

動態庫是一種特殊的二進位制檔案,可以在執行時被一個或多個程式共享。為了建立一個動態庫,你需要編寫相應的 C++ 程式碼。假設我們有一個簡單的函式 hello(),我們想將其放入動態庫中:

#include <iostream>
using namespace std;

int hello() {
    cout << "hello world" << endl;
    return 0;
}

2. 編譯動態庫

使用 g++(GNU C++ 編譯器)來編譯程式碼為動態庫。使用 -fPIC(Position Independent Code)選項來生成與位置無關的程式碼,這是建立共享庫所必需的。使用 -shared 來建立共享庫,並指定輸出檔案的名稱(通常以 .so 結尾)。

g++ -fPIC -shared -o libhello.so hello.cpp

這將生成 libhello.so 檔案。

3. 使用動態庫

要在另一個程式中使用這個庫,你需要編寫一個程式來呼叫庫中的函式。例如:

// main.cpp
#include <iostream>
using namespace std;
void hello()// 宣告函式

int main() {
    hello(); // 呼叫函式
    return 0;
}

4. 編譯程式並連結動態庫

編譯這個程式並連結到你的動態庫。你需要指定庫的位置(如果它不在標準路徑中):

g++ -o main main.cpp -L. -lhello

這裡,-L. 選項告訴編譯器在當前目錄查詢庫,-lhello 選項告訴它連結 libhello.so(注意 lib 字首和 .so 字尾在指定時會被省略)。

5. 執行程式

在執行程式之前,你可能需要設定 LD_LIBRARY_PATH 環境變數以包含你的庫檔案,特別是當它不在標準庫路徑中時:

export LD_LIBRARY_PATH=.:$LD_LIBRARY_PATH
./main
一個簡單例子教會你C++動態庫的用法

這告訴執行時連結器在當前目錄中查詢動態庫。

注意事項

  • 確保動態庫在程式執行時可用,否則程式將無法啟動。
  • 動態庫的版本和相容性需要管理,因為它們可以被多個程式共享。
  • 對於更復雜的專案,可能需要使用構建系統(如 CMake)來管理編譯和連結過程。

透過以上步驟,你可以在 Linux 下建立和使用 C++ 動態庫。

來自 “ ITPUB部落格 ” ,連結:http://blog.itpub.net/70024924/viewspace-2998727/,如需轉載,請註明出處,否則將追究法律責任。