I have two C static libraries libA and libB that I link against my executable E.
libA has a function that makes a call to a function that is in libB:
myLibAFunctionThatCallsAfunctionInLibB( ... )
{ libB_function(...); }
Both libraries compile fine. My executable E also compiles fine. E is compiled with gcc using -lA -lB flags with the proper -I and -L paths.
The problem occurs at runtime when myLibAFunctionThatCallsAfunctionInLibB is called. I get the follow开发者_如何学编程ing error:
dyld: lazy symbol binding failed: Symbol not found: _libB_function
Referenced from: libA.dylib
Expected in: flat namespace
I have checked that all architectures are the same (i386). Also nm -a libB.a shows that libB_function is actually part of libB. I have tried declaring libB_function(...); as extern in libA with no difference. I am using gcc 4.2.1 on osx 10.6 if that's of any incidence.
Is it just not possible to cross reference libraries the way I am trying to do it? Do I HAVE to include the implementation code for libB_function in my libA library?
Thanks
Baba
ok I found a work around. I rewrote my function in libB instead of libA. In short I now call libA from libB instead of libB from libA. In this case it works. I guess it has to do with the fact that libA is dynamic loaded library and B is static ... but I do not understand why. Any expert light is welcomed.
Thanks.
加载中,请稍侯......
精彩评论