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

时间:2013-02-03 09:58:00

标签: c linker clang dynamic-linking dyld

我有一个专门的共享库,在执行可执行文件时动态加载。该库提供函数b()。反过来,此函数调用函数a()

a函数是在可执行文件中定义的,而不是库本身,因此我希望能够从库中调用我的一些可执行代码。我设法使用-undefined dynamic_lookup标志使clang离开这些符号进行延迟绑定,但是当我尝试运行可执行文件时,dyld仍然会抱怨:

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

如何将此符号链接起来?

1 个答案:

答案 0 :(得分:0)

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

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