0

我有两个 C 静态库libAlibB并且我链接到我的可执行文件E

libA有一个函数调用一个函数,该函数位于libB

myLibAFunctionThatCallsAfunctionInLibB( ... )
{ libB_function(...); }

两个库都编译得很好。我的可执行文件E也编译得很好。使用带有正确和路径的标志E使用 gcc 编译。-lA -lB-I-L

该问题发生在运行时myLibAFunctionThatCallsAfunctionInLibB调用。我收到以下错误:

dyld: lazy symbol binding failed: Symbol not found: _libB_function
  Referenced from: libA.dylib
  Expected in: flat namespace

我检查了所有架构是否相同(i386)。也nm -a libB.a表明libB_function实际上是libB. 我尝试过声明libB_function(...);externinlibA没有区别。如果发生这种情况,我在 osx 10.6 上使用 gcc 4.2.1。

是不是不可能像我尝试的那样交叉引用库?libB_function我必须在我的libA库中包含实现代码吗?

谢谢

爸爸

4

1 回答 1

0

好的,我找到了解决方法。我在 libB 而不是 libA 中重写了我的函数。简而言之,我现在从 libB 调用 libA,而不是从 libA 调用 libB。在这种情况下,它可以工作。我想这与 libA 是动态加载的库而 B 是静态的这一事实有关……但我不明白为什么。欢迎任何专家之光。

谢谢。

于 2010-10-06T18:32:04.943 回答