GCC 4.4.3,Ubuntu。
3个项目:
- A(静态库)构建成功
- B(静态库)构建成功
- X(共享库或控制台应用程序)链接器错误
为什么这个案例不让链接X?
X calls B;
B calls A; // WHY???? linker error in X: B has undefined reference to stuff in A
这个案例有效:
X calls A; // this fact allows B access A
X calls B;
B calls A; // Now X linked just fine
完整代码:
//////////////////////////////
// StaticAAA.cpp
void FunctionAAA()
{
}
//////////////////////////////
// StaticBBB.cpp
void FunctionAAA();
void FunctionBBB()
{
FunctionAAA();
}
//////////////////////////////
// App.cpp
void FunctionAAA();
void FunctionBBB();
int main()
{
#ifdef WHY_LINKER_ERROR_FIXED
FunctionAAA();
#endif
FunctionBBB();
return 0;
}
最佳答案
gcc 命令行上的库顺序很重要 - 您需要按依赖顺序列出库。如果你有任何循环依赖,那么你可能需要至少列出一个库两次以满足这一要求。
在您的特定情况下,您可能需要这样的东西:
$ g++ ... X.o -lB -lA ...
关于c++ - GCC 链接器 : staticA can't see staticB while linking other shared library,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/8801087/