gpt4 book ai didi

macos - Mac : How to export symbols from an executable?

转载 作者:行者123 更新时间:2023-12-04 14:19:26 26 4
gpt4 key购买 nike

我正在编写一个可执行文件,它使用 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 上解决这个问题?是否有等效的“导入库”(Windows 链接器在创建 .dll 时创建的 stub 库,因此,如果任何模块需要动态链接到 .dll,则它与“导入库”链接)?还是其他解决方案?

最佳答案

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

env MACOSX_DEPLOYMENT_TARGET=10.3 gcc -bundle -undefined dynamic_lookup -o random.so lrandom.o

关于macos - Mac : How to export symbols from an executable?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/3954137/

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