2012-01-10 9 views
0

GCC 4.4.3、Ubuntu。GCCリンカー:staticAは他の共有ライブラリをリンクするときにstaticBを見ることができません

3プロジェクト:

  • A(スタティックライブラリ)OK
  • B(静的ライブラリ)を構築する構築OK
  • 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; 
} 
+1

があなたのgccのリンカのコマンドラインを表示:あなたの特定のケースで

は、おそらくのような何かをしたいです! –

+0

Paul R、ありがとう!注文A、Bは働かない、BはAが働いた!これを答えとして投稿すると、他の人に見られるようにマークします。 –

答えて

3

gccのコマンドラインにライブラリの順序は重要です - あなたは依存関係の順序でライブラリをリストする必要があります。循環依存がある場合は、この要件を満たすために少なくとも1つのライブラリを2回リストする必要があります。オーダーライブラリ事項: - NB

$ g++ ... X.o -lB -lA ... 
関連する問題