动态共享库 (DSL) 为 C 中的代码重用和模块化提供了强大的机制。它们允许多个程序共享库代码的单个副本,从而减少内存使用并提高性能。
要创建 DSL,您需要定义类和函数分别位于头文件和实现文件中。在头文件中,使用虚函数声明您的类以防止静态链接。在实现文件中,定义函数并提供用于创建和销毁对象的包装函数。
// myclass.h class MyClass { public: virtual void DoSomething(); private: int x; }; // myclass.cc extern "C" MyClass* create_object() { return new MyClass; } extern "C" void destroy_object(MyClass* object) { delete object; }
在 Linux 上:
g++ -fPIC -shared myclass.cc -o myclass.so
在 Mac 操作系统上X:
g++ -dynamiclib -flat_namespace myclass.cc -o myclass.so
在单独的可执行文件中,使用 dlopen() 加载 DSL 并检索指向 create_object() 和 destroy_object() 函数的指针。使用create_object()创建一个类实例,使用类方法,最后调用destroy_object()来释放内存。
// class_user.cc int main() { void* handle = dlopen("myclass.so", RTLD_LAZY); MyClass* (*create)(); void (*destroy)(MyClass*); create = (MyClass* (*)())dlsym(handle, "create_object"); destroy = (void (*)(MyClass*))dlsym(handle, "destroy_object"); MyClass* myClass = (MyClass*)create(); myClass->DoSomething(); destroy(myClass); }
编译和链接:
开启Linux:
g++ class_user.cc -ldl -o class_user
在 Mac OS X 上:
g++ class_user.cc -o class_user
提供的示例展示了如何创建共享类库,将其加载到单独的可执行文件中,并利用类功能。主要概念涉及定义类和函数、创建用于对象创建和销毁的包装函数、加载库以及调用类方法。
以上是如何在 Linux 上用 C 创建和使用动态共享库 (DSL)?的详细内容。更多信息请关注PHP中文网其他相关文章!