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