交叉引用库和C中的链接

时间:2010-10-06 16:45:56

标签: c linker libraries cross-reference

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

libA有一个函数可以调用libB中的函数:

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

两个库编译都很好。我的可执行文件E也编译得很好。使用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的实施代码?

由于

巴巴

1 个答案:

答案 0 :(得分:0)

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

感谢。