我有两个C静态库libA
和libB
,我链接到我的可执行文件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
的实施代码?
由于
巴巴
答案 0 :(得分:0)
好的我找到了解决方法。我在libB而不是libA中重写了我的函数。简而言之,我现在从libB调用libA而不是从libA调用libB。在这种情况下它有效。我想这与libA是动态加载库而B是静态的这一事实有关...但我不明白为什么。任何专业人士都欢迎。
感谢。