阅读量:3
在 Linux 上,使用 C++ 实现动态链接库(DLL)通常是通过创建共享对象(Shared Object,简称 SO 文件)来实现的。以下是创建和使用共享对象的基本步骤:
- 编写头文件(.h):为你的库定义函数原型和数据结构。
// mylib.h
#ifndef MYLIB_H
#define MYLIB_H
#ifdef __cplusplus
extern "C" {
#endif
void my_function();
#ifdef __cplusplus
}
#endif
#endif // MYLIB_H
- 编写源文件(.cpp):实现头文件中声明的函数。
// mylib.cpp
#include
#include "mylib.h"
void my_function() {
std::cout << "Hello from my_function!" << std::endl;
}
- 编译源文件为位置无关代码(Position Independent Code,PIC):使用
-fPIC选项编译源文件,生成位置无关代码。
g++ -fPIC -c mylib.cpp -o mylib.o
- 创建共享对象:使用
g++将编译好的目标文件链接为共享对象。
g++ -shared -o libmylib.so mylib.o
现在,你已经成功创建了一个名为 libmylib.so 的共享对象。接下来,你可以在其他程序中使用这个库。
- 使用共享对象:在其他程序中使用
dlopen()和dlsym()函数动态加载和调用共享对象中的函数。
// main.cpp
#include
#include
#include "mylib.h"
int main() {
void* handle = dlopen("./libmylib.so", RTLD_LAZY);
if (!handle) {
std::cerr << "Error: " << dlerror() << std::endl;
return 1;
}
typedef void (*my_function_t)();
my_function_t my_function = (my_function_t)dlsym(handle, "my_function");
if (!my_function) {
std::cerr << "Error: " << dlerror() << std::endl;
dlclose(handle);
return 1;
}
my_function();
dlclose(handle);
return 0;
}
- 编译并运行程序:使用
g++编译主程序,并链接到共享对象。
g++ main.cpp -ldl -o main
./main
这将输出:
Hello from my_function!
这就是在 Linux 上使用 C++ 实现动态链接库的基本过程。注意,这里的示例代码仅供参考,实际使用时可能需要根据具体需求进行调整。
以上就是关于“C++于Linux怎样实现动态链接库”的相关介绍,筋斗云是国内较早的云主机应用的服务商,拥有10余年行业经验,提供丰富的云服务器、租用服务器等相关产品服务。云服务器资源弹性伸缩,主机vCPU、内存性能强悍、超高I/O速度、故障秒级恢复;电子化备案,提交快速,专业团队7×24小时服务支持!
简单好用、高性价比云服务器租用链接:https://www.jindouyun.cn/product/cvm