在Linux上部署C++程序并使用動態鏈接庫(Dynamic Link Library,簡稱DLL)的過程分為幾個步驟。以下是一個詳細的指南:
首先,你需要創建一個動態鏈接庫。假設你要創建一個名為 libmylib.so
的庫,其中包含一個簡單的函數 add
。
創建一個名為 mylib.cpp
的文件,內容如下:
#include <iostream>
extern "C" {
int add(int a, int b) {
return a + b;
}
}
注意使用 extern "C"
來防止C++的名稱修飾(name mangling)。
使用 g++
編譯器編譯這個文件,并生成動態鏈接庫:
g++ -shared -fPIC -o libmylib.so mylib.cpp
創建一個名為 main.cpp
的文件,內容如下:
#include <iostream>
#include <dlfcn.h>
int main() {
void* handle = dlopen("libmylib.so", RTLD_NOW);
if (!handle) {
std::cerr << "Cannot open library: " << dlerror() << std::endl;
return 1;
}
int (*add)(int, int) = (int (*)(int, int))dlsym(handle, "_Z3addi");
if (!add) {
std::cerr << "Cannot find symbol: " << dlerror() << std::endl;
dlclose(handle);
return 1;
}
int result = add(3, 4);
std::cout << "Result: " << result << std::endl;
dlclose(handle);
return 0;
}
使用 g++
編譯器編譯主程序,并鏈接到動態鏈接庫:
g++ -o main main.cpp -L. -lmylib
確保動態鏈接庫在系統的庫路徑中,然后運行主程序:
./main
你應該會看到輸出 Result: 7
。
如果你將動態鏈接庫放在非標準路徑中,可以使用 LD_LIBRARY_PATH
環境變量來指定庫路徑:
export LD_LIBRARY_PATH=.:$LD_LIBRARY_PATH
./main
通過以上步驟,你成功地在Linux上部署了一個C++程序,并使用動態鏈接庫。關鍵步驟包括創建動態鏈接庫、編寫主程序、編譯主程序并鏈接到動態鏈接庫,最后運行程序。