我正在维护一个 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/

10-12 00:33
查看更多