gpt4 book ai didi

c++ - 与动态加载的库共享数据(dlopen、dlsym)

转载 作者:太空狗 更新时间:2023-10-29 22:52:53 25 4
gpt4 key购买 nike

我的主程序会加载一个名为 hello.so 的简单动态库

主要


void* handle = dlopen("./hello.so", RTLD_LAZY);

在 main 中,传递一个名为 testing 的回调函数(在 main.h 中某处定义) 并从动态调用 hello()图书馆


typedef void (*callback)();
typedef void (*hello_t)( callback);

/* do something */

hello_t hello = (hello_t) dlsym(handle, "hello");
hello(testing);

在动态库中,


#include
#include "main.h"

extern "C" void hello( void (*fn)() ) {
/*do something and then invoke callback function from main */ fn();
}

除了使用回调之外,是否还有其他方法允许从动态库中调用/使用 main 的函数/数据?

最佳答案

不,在我看来,这是首选的方式。我能想到的任何其他方式都涉及让 DLL 知道它所链接的程序中的对象,这很可能是不好的做法。

关于数据,虽然你没有问,但只是提醒一下,如果需要跨库/程序边界传递,通常最好复制任何需要存储的数据。如果库使用的数据的生命周期由程序控制,则可能会陷入一团糟,反之亦然。

关于c++ - 与动态加载的库共享数据(dlopen、dlsym),我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/3454909/

25 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com