在Linux上进行C++动态链接库(DLL)编程,通常使用的是共享对象(Shared Object),其扩展名为.so。以下是创建和使用共享对象库的基本步骤:
首先,你需要编写一些C++源代码文件。例如,创建一个名为hello.cpp的文件:
// hello.cpp
#include <iostream>
extern "C" {
void hello_from_so() {
std::cout << "Hello from the shared object!" << std::endl;
}
}
注意:使用extern "C"是为了防止C++编译器对函数名进行名称改编(name mangling),这样其他程序可以更容易地找到这个函数。
使用g++编译器将源代码编译成目标文件:
g++ -fPIC -c hello.cpp
-fPIC选项生成位置无关代码(Position Independent Code),这是创建共享库所必需的。
将目标文件打包成共享对象库:
g++ -shared -o libhello.so hello.o
-shared选项告诉编译器生成共享库,-o libhello.so指定输出文件名为libhello.so。
创建一个名为main.cpp的文件,内容如下:
// main.cpp
#include <iostream>
// 声明外部函数
extern "C" void hello_from_so();
int main() {
hello_from_so();
return 0;
}
编译时需要指定共享库的路径。假设共享库文件libhello.so位于当前目录:
g++ -o main main.cpp -L. -lhello
-L.指定库文件的搜索路径为当前目录,-lhello链接名为libhello.so的库。
运行程序时,需要确保共享库在系统的库搜索路径中。可以通过以下方式之一来实现:
/usr/lib或/usr/local/lib)。LD_LIBRARY_PATH环境变量,使其包含共享库所在的目录:export LD_LIBRARY_PATH=.
./main
如果你不再需要共享库或目标文件,可以使用以下命令进行清理:
rm hello.o libhello.so main
以上步骤涵盖了在Linux上创建和使用C++动态链接库的基本过程。通过这些步骤,你可以创建自己的共享对象库,并在其他程序中使用它们。