在Linux環境下,C++進行動態鏈接庫(DLL)編程通常涉及創建共享庫(shared library),然后在其他程序中使用這個庫。以下是創建和使用共享庫的基本步驟:
// mylib.h
#ifndef MYLIB_H
#define MYLIB_H
#ifdef __cplusplus
extern "C" {
#endif
void hello_from_mylib();
#ifdef __cplusplus
}
#endif
#endif // MYLIB_H
// mylib.cpp
#include <iostream>
#include "mylib.h"
void hello_from_mylib() {
std::cout << "Hello from mylib!" << std::endl;
}
g++
將源文件編譯成位置無關代碼(PIC)的對象文件。g++ -fPIC -c mylib.cpp -o mylib.o
g++
將對象文件打包成共享庫。g++ -shared -o libmylib.so mylib.o
這將在當前目錄下創建一個名為libmylib.so
的共享庫。
// main.cpp
#include <iostream>
#include "mylib.h"
int main() {
hello_from_mylib();
return 0;
}
-L
選項來指定庫的搜索路徑,使用-l
選項來指定庫的名稱(去掉lib
前綴和.so
后綴)。g++ main.cpp -L. -lmylib -o myapp
如果共享庫不在標準庫路徑中,你可能還需要設置LD_LIBRARY_PATH
環境變量,以便運行時能夠找到共享庫。
export LD_LIBRARY_PATH=.
./myapp
或者,你可以將共享庫安裝到系統庫路徑中,這樣就不需要每次都設置LD_LIBRARY_PATH
。
extern "C"
可以防止C++編譯器對函數名進行名稱改編(name mangling),這樣其他語言編寫的程序也能正確鏈接到你的共享庫。以上就是在Linux環境下使用C++進行動態鏈接庫編程的基本步驟。根據項目的不同需求,可能還需要考慮更多的細節,比如線程安全、異常處理等。