在Linux中,使用C++实现动态链接库(DLL)通常是通过创建共享对象(Shared Object,简称.so文件)来实现的。以下是创建和使用动态链接库的基本步骤:
// mylib.h #ifndef MYLIB_H #define MYLIB_H #ifdef __cplusplus extern "C" { #endif void myFunction(); #ifdef __cplusplus } #endif #endif // MYLIB_H // mylib.cpp #include "mylib.h" #include <iostream> void myFunction() { std::cout << "Hello from myFunction!" << std::endl; } g++ -fPIC -c mylib.cpp -o mylib.o g++ -shared -o libmylib.so mylib.o -fPIC选项告诉编译器生成位置无关代码(Position Independent Code),这是创建共享库所必需的。-shared选项告诉g++创建一个共享库。
// main.cpp #include "mylib.h" int main() { myFunction(); return 0; } 编译主程序时,需要指定共享库的位置,可以使用-L选项指定库的路径,使用-l选项指定库的名字(不需要前缀lib和后缀.so)。
g++ main.cpp -L/path/to/library -lmylib -o myprogram LD_LIBRARY_PATH环境变量来实现。export LD_LIBRARY_PATH=/path/to/library:$LD_LIBRARY_PATH ./myprogram 或者,你可以将库文件复制到系统默认的库路径中,例如/usr/lib或/usr/local/lib。
注意:在Linux中,动态链接库的标准文件扩展名是.so,而不是Windows中的.dll。此外,为了避免名称冲突,通常会在库的名字前加上lib前缀,例如libmylib.so。在使用时,链接器会自动添加这个前缀和.so后缀。