c++ - GCC 链接器 : staticA can't see staticB while linking other shared library

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

相关文章:

c++ - 使用CMake和GCC(MacOS Sierra)进行编译时找不到SFML header

c++ - 冲突的 boost 版本

c++ - 使用 lambda 创建的静态变量是线程安全的吗?

c++ - 静态变量和线程局部存储

c++ - "boolean short circuiting"是由标准规定的还是仅用作优化?

c++ - 在编译时创建查找表

java - 为什么在 JNI 中调用纤程会在 JVM 中引发 StackOverflow?

c++ - 需要 Union hack

c - asm volatile (""::: "memory") 的生命周期是多少?

c - 在 C 中使用静态函数和变量的原因