C++ 封装的 SO 库教程:从入门到实践
C++ 封装的 SO 库是指使用 C++ 语言编写的动态链接库 (Shared Object Library),这种库可以被其他语言调用。下面是一个简单的 C++ 封装的 SO 库的教程。
- 创建一个 C++ 类:
// MyClass.h
#ifndef MYCLASS_H
#define MYCLASS_H
class MyClass {
public:
MyClass();
void hello();
};
#endif
// MyClass.cpp
#include "MyClass.h"
#include <iostream>
MyClass::MyClass() {}
void MyClass::hello() {
std::cout << 'Hello from MyClass!' << std::endl;
}
- 编译生成动态链接库:
g++ -shared -o libmyclass.so MyClass.cpp
- 使用动态链接库:
// main.cpp
#include "MyClass.h"
#include <dlfcn.h>
#include <iostream>
int main() {
// 加载动态链接库
void* handle = dlopen("./libmyclass.so", RTLD_LAZY);
if (!handle) {
std::cerr << "Failed to load library: " << dlerror() << std::endl;
return 1;
}
// 获取类构造函数和成员函数指针
typedef MyClass* (*create_t)();
typedef void (*hello_t)(MyClass*);
create_t create = (create_t) dlsym(handle, "create");
hello_t hello = (hello_t) dlsym(handle, "hello");
// 创建类对象并调用成员函数
MyClass* obj = create();
hello(obj);
// 释放资源
dlclose(handle);
delete obj;
return 0;
}
- 编译并运行程序:
g++ -o main main.cpp -ldl
./main
上述代码中,动态链接库中的类构造函数和成员函数使用了 C 语言的函数指针,以便能够被其他语言调用。在主程序中,使用 dlopen 函数加载动态链接库,然后使用 dlsym 函数获取类构造函数和成员函数的指针。最后,通过函数指针创建类对象并调用成员函数。注意,在使用完动态链接库后,需要使用 dlclose 函数释放资源。
这只是一个简单的例子,实际应用中可能需要更复杂的封装和接口设计。希望这个教程对你有帮助!
原文地址: https://www.cveoy.top/t/topic/qxXe 著作权归作者所有。请勿转载和采集!