在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++进行动态链接库编程的基本步骤。根据项目的不同需求,可能还需要考虑更多的细节,比如线程安全、异常处理等。