我有两个C静态库libA
和libB
,它们链接到我的可执行文件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(...);
声明为extern
在libA
中没有区别。如果发生任何情况,我在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/