我正在写一个使用dlopen()(Windows上的LoadLibrary())来动态加载共享库的可执行文件。共享库使用可执行文件中的符号。Mac:如何从可执行文件导出符号?
在Windows中,这是可能的。可执行文件可以导出符号:declspec(dllexport)和.def文件都可以使用。链接器在创建.exe时还会创建.lib文件(“导入库”),因此该DLL只需与该.lib链接即可。
在Linux中,这也是可能的。构建可执行文件时,我传递-Wl,-export_dynamic,以便导出它的符号。
在Mac OS X,而不是...轮候册,-export_dynamic不起作用,但轮候册,-exported_symbols_list,<filename>
其中<filename>
是符号导出列表(排序的一个简化版本.def文件)。但是,建立共享库并不容易:链接器抱怨未解决的符号。
我试过一个黑客:将可执行文件重命名为lib <executable>
.dylib,并且在链接共享库时,我通过了-l <executable>
。但它给出的错误“无法与主可执行文件链接”。
一般问题是Linux共享库可能有未解析的符号,而Windows和Mac OS X不允许它。但Windows有“导入库”来解决依赖关系的符号,而Mac OS X显然不...
这怎么能解决在Mac OS X上?是否有相当于一个“导入库”(创建.dll时由Windows链接器创建的存根库,因此,如果有任何模块需要动态链接到.dll,它与“导入库”链接)?或者其他解决方案?
顺便提一下,10.5和更高版本不需要“env MACOSX_DEPLOYMENT_TARGET = 10.3”。 – lhf 2011-01-18 21:31:57