C++ GCC链接器:staticA can';链接其他共享库时看不到staticB
GCC 4.4.3,Ubuntu 3个项目:C++ GCC链接器:staticA can';链接其他共享库时看不到staticB,c++,gcc,static,linker,C++,Gcc,Static,Linker,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; //
- A(静态库)构建正常
- B(静态库)构建正常
- 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 ...
gcc命令行上库的顺序很重要-您需要按依赖项顺序列出库。如果您有任何循环依赖项,那么您可能需要至少列出一个库两次,以满足此要求 在您的特定情况下,您可能需要以下内容:
$ g++ ... X.o -lB -lA ...
显示您的gcc链接器命令行-NB:库的顺序问题!保罗R,非常感谢你!订单A,B不起作用,B,A起作用!将此作为答案发布,我将标记它,以便其他人看到。显示您的gcc链接器命令行-NB:库的顺序事项!保罗R,非常感谢你!订单A,B不起作用,B,A起作用!将此作为答案发布,我将标记它,以便其他人看到。