我有两个C静态库libAlibB,它们链接到我的可执行文件E

libA具有调用libB中的函数的函数:

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


两个库都可以编译。我的可执行文件E也可以正常编译。 gcc使用E标志以及正确的-lA -lB-I路径使用gcc编译-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(...);声明为externlibA中没有区别。如果发生任何情况,我在osx 10.6上使用gcc 4.2.1。

只是无法以我尝试的方式交叉引用库吗?我必须在我的libB_function库中包含libA的实现代码吗?

谢谢

巴巴

最佳答案

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

谢谢。

关于c - 交叉引用库和C中的链接,我们在Stack Overflow上找到一个类似的问题:https://stackoverflow.com/questions/3874896/

10-11 12:03