在 Linux 上用 C 创建和使用动态共享库
动态共享库 (DSL) 允许多个程序共享代码,减少内存使用并提高效率。在 C 中,DSL 允许创建可供多个可执行文件访问的可重用类库。
创建 DSL
要创建 DSL,请在标头中定义类接口和实现和源文件(例如 myclass.h 和 myclass.cc)。确保该类包含虚拟析构函数和标记为 extern“C”的公共方法,以方便符号加载。
使用 DSL
要在单独的可执行文件中使用 DSL,执行以下步骤:
示例代码
myclass.h
#include <iostream> class MyClass { public: MyClass(); virtual void DoSomething(); private: int x; };
myclass.cc
#include "myclass.h" extern "C" MyClass* create_object() { return new MyClass; } extern "C" void destroy_object(MyClass* object) { delete object; } MyClass::MyClass() { x = 20; } void MyClass::DoSomething() { std::cout << x << std::endl; }
class_user.cc
#include <dlfcn.h> #include <iostream> #include "myclass.h" 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 = create(); myClass->DoSomething(); destroy(myClass); }
编译和执行
在 Mac OS X 上:
在 Linux 上:
执行class_user以使用MyClass共享库。它将成功实例化并利用 MyClass 对象。
以上是如何在 Linux 上用 C 创建和使用动态共享库 (DSL)?的详细内容。更多信息请关注PHP中文网其他相关文章!