macos – Mac:如何从可执行文件中导出符号?

我正在编写一个可执行文件,它使用dlopen()( Windows上的LoadLibrary())来动态加载共享库.共享库使用可执行文件中的符号.

在Windows中这是可能的.可执行文件可以导出符号:declspec(dllexport)和.def文件都可以.创建.exe时,链接器也会创建.lib文件(“导入库”),因此DLL只需要链接该.lib.

Linux中,这也是可能的.我在构建可执行文件时传递-Wl,-export_dynamic,以便导出其符号.

在Mac OS X上,而不是…… -Wl,-export_dynamic不起作用,但有-Wl,-exported_symbols_list,< filename>其中< filename>是要导出的符号列表(一种更简单的.def文件版本).但是,构建共享库并不容易:链接器抱怨未解析的符号.

我尝试了一个hack:将可执行文件重命名为lib< executable> .dylib,并且在链接共享库时,我传递了-l< executable>.但它给出了错误“无法与主要可执行文件链接”.

一般问题是Linux共享库可能有未解析的符号,而Windows和Mac OS X不允许它.但Windows有“导入库”来解决符号依赖的符号,而Mac OS X显然不会……

如何在Mac OS X上解决这个问题?是否有相当于“导入库”(在创建.dll时由Windows链接器创建的存根库,因此,如果任何模块需要动态链接到.dll,它是否与“导入库”链接)?或其他一些解决方案?

独立的Lua解释器支持动态加载(通过dlopen)使用可执行文件中的符号(Lua API)的共享库.构建它时不使用特殊的链接标志.共享库是使用此咒语构建的:

env MACOSX_DEPLOYMENT_TARGET=10.3 gcc -bundle -undefined dynamic_lookup -o random.so lrandom.o
相关文章
相关标签/搜索