在Linux下进行C++动态链接库(DLL)编程,通常使用的是共享对象(Shared Object),扩展名为.so
。以下是创建和使用共享对象的基本步骤:
首先,你需要编写一个或多个源文件,然后使用g++
编译器来生成共享对象。
假设你有一个名为hello.cpp
的源文件:
// hello.cpp
#include <iostream>
extern "C" void hello_from_so() {
std::cout << "Hello from shared object!" << std::endl;
}
注意这里使用了extern "C"
来防止C++名称改编(name mangling),这样可以在其他语言中更容易地调用这个函数。
接下来,使用以下命令编译生成共享对象:
g++ -fPIC -shared -o libhello.so hello.cpp
-fPIC
:生成位置无关代码(Position Independent Code),这是创建共享库所必需的。-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;
}
然后,编译主程序并链接共享对象:
g++ -o main main.cpp -L. -lhello
-L.
:指定库文件的搜索路径为当前目录。-lhello
:链接名为libhello.so
的库。运行程序之前,你需要确保共享对象在系统的库路径中,或者设置LD_LIBRARY_PATH
环境变量来包含共享对象的目录:
export LD_LIBRARY_PATH=.
./main
这将输出:
Hello from shared object!
完成开发后,你可以删除生成的.so
文件和编译过程中产生的其他临时文件。
lib
开头,以.so
结尾,例如libhello.so
。LD_LIBRARY_PATH
环境变量或在/etc/ld.so.conf
中添加路径来实现。/usr/lib
或/usr/local/lib
等标准库路径,并运行ldconfig
来更新共享库缓存。以上就是在Linux下进行C++动态链接库编程的基本步骤。