gpt4 book ai didi

c - 让 dyld 链接到可执行文件本身的函数?

转载 作者:太空宇宙 更新时间:2023-11-04 04:51:24 24 4
gpt4 key购买 nike

我有一个专门的共享库,它在可执行文件的执行期间动态加载。该库提供函数 b()。此函数依次调用函数 a()

a 函数是在可执行文件中定义的,而不是库本身,因此我希望能够从库中调用一些可执行文件的代码。我已经设法使用 -undefined dynamic_lookup 标志让 clang 保留这些符号用于延迟绑定(bind),但是当我尝试运行可执行文件时 dyld 仍然提示:

dyld: lazy symbol binding failed: Symbol not found: _a
Referenced from: /usr/local/lib/myLib.dylib
Expected in: flat namespace

如何链接这个符号?

最佳答案

事实证明,这是由于 Xcode 默认不导出符号造成的。您可以通过更改 LLVM 代码生成build设置下的“默认隐藏的符号”选项来解决此问题。如果您不使用 Xcode,这将控制是否在命令行上使用 -fvisiblity=hidden 标志。

或者,您可以将此选项保持打开状态,并通过将 __attribute__((visibility("default"))) 属性添加到您要导出的函数来选择性地导出符号。

关于c - 让 dyld 链接到可执行文件本身的函数?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/14671295/

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