C++ 封装的 SO 库是指使用 C++ 语言编写的动态链接库 (Shared Object Library),这种库可以被其他语言调用。下面是一个简单的 C++ 封装的 SO 库的教程。

  1. 创建一个 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;
}
  1. 编译生成动态链接库:
g++ -shared -o libmyclass.so MyClass.cpp
  1. 使用动态链接库:
// 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;
}
  1. 编译并运行程序:
g++ -o main main.cpp -ldl
./main

上述代码中,动态链接库中的类构造函数和成员函数使用了 C 语言的函数指针,以便能够被其他语言调用。在主程序中,使用 dlopen 函数加载动态链接库,然后使用 dlsym 函数获取类构造函数和成员函数的指针。最后,通过函数指针创建类对象并调用成员函数。注意,在使用完动态链接库后,需要使用 dlclose 函数释放资源。

这只是一个简单的例子,实际应用中可能需要更复杂的封装和接口设计。希望这个教程对你有帮助!

C++ 封装的 SO 库教程:从入门到实践

原文地址: https://www.cveoy.top/t/topic/qxXe 著作权归作者所有。请勿转载和采集!

免费AI点我,无需注册和登录