gpt4 book ai didi

c - 从 OS X 上的 C 中的 dlopen()ed 动态库访问主程序全局变量

转载 作者:太空狗 更新时间:2023-10-29 17:08:03 25 4
gpt4 key购买 nike

我正在维护一个 small application它具有一些类似插件的功能,这些功能是通过运行时加载的动态模块实现的。

具体来说,因为它是一个 Gtk+ 应用程序,所以我使用的是 gmodule,但这个问题同样适用于基于 dlfcn.h/dlopen() 的动态库加载。

我的主程序有一个全局结构变量,其中包含一些全局信息。我希望此信息可用于动态加载插件中定义的函数。

在 Linux 上,我可以直接引用这个全局变量 - 这很有效,我猜 gcc 或链接器负责将全局变量从主程序导出到动态库。

问题是,这在 Mac OS X 上不起作用。有没有办法在 OS X 上做到这一点?

如果没有,是否有更“最佳实践”的方式将全局信息公开给动态加载的库?

最佳答案

将全局放在 main.c 中并在共享对象中将其声明为 extern,然后试试这个:

MACOSX_DEPLOYMENT_TARGET=10.3 ld -dylib -undefined dynamic_lookup -o multiply.so multiply.o

MACOSX_DEPLOYMENT_TARGET=10.3 libtool -dynamic -undefined dynamic_lookup -o multiply.so multiply.o

它适用于 Mac OS X 10.4

关于c - 从 OS X 上的 C 中的 dlopen()ed 动态库访问主程序全局变量,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/1933667/

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