C++ GCC链接器:staticA can';链接其他共享库时看不到staticB

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; //

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 ...

gcc命令行上库的顺序很重要-您需要按依赖项顺序列出库。如果您有任何循环依赖项,那么您可能需要至少列出一个库两次,以满足此要求

在您的特定情况下,您可能需要以下内容:

$ g++ ... X.o -lB -lA ...

显示您的gcc链接器命令行-NB:库的顺序问题!保罗R,非常感谢你!订单A,B不起作用,B,A起作用!将此作为答案发布,我将标记它,以便其他人看到。显示您的gcc链接器命令行-NB:库的顺序事项!保罗R,非常感谢你!订单A,B不起作用,B,A起作用!将此作为答案发布,我将标记它,以便其他人看到。