1

我有一个专门的共享库,在执行可执行文件期间动态加载。这个库提供了函数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

我怎样才能得到这个符号链接?

4

1 回答 1

0

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

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

于 2013-02-03T19:56:00.790 回答