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函数释放资源。
这只是一个简单的例子,实际应用中可能需要更复杂的封装和接口设计。希望这个教程对你有帮助
原文地址: http://www.cveoy.top/t/topic/iRXz 著作权归作者所有。请勿转载和采集!