2011-08-13 7 views
0

私は静的ライブラリファイルを生成したXcodeでBox2Dライブラリをコンパイルしました。コンパイル結果が "undefined symbols for architecture i386"

このライブラリをモノラルタッチにリンクしましたが、コンパイルしようとすると、さまざまなソースファイルの未定義シンボルに関するエラーが発生します。

私は最初の数を見てきたし、彼らは例えば、(新しいmalloc関数/を使用してIE)ポインタの初期化文句ているように見える

Undefined symbols for architecture i386: 
    "std::terminate()", referenced from: 
     b2BroadPhase::b2BroadPhase()in libBox2D.a(b2BroadPhase.o) 
     b2BroadPhase::~b2BroadPhase()in libBox2D.a(b2BroadPhase.o) 
     b2BroadPhase::~b2BroadPhase()in libBox2D.a(b2BroadPhase.o) 
     b2BroadPhase::b2BroadPhase()in libBox2D.a(b2BroadPhase.o) 
     b2Island::Solve(b2TimeStep const&, b2Vec2 const&, bool)in libBox2D.a(b2Island.o) 
     b2World::b2World(b2Vec2 const&, bool)in libBox2D.a(b2World.o) 
     b2World::SolveTOI(b2Body*)  in libBox2D.a(b2World.o) 

b2BroadPhaseコンストラクタはそうのようになります。

b2BroadPhase::b2BroadPhase() 
{ 
    m_proxyCount = 0; 

    m_pairCapacity = 16; 
    m_pairCount = 0; 
    m_pairBuffer = (b2Pair*)b2Alloc(m_pairCapacity * sizeof(b2Pair)); 

    m_moveCapacity = 16; 
    m_moveCount = 0; 
    m_moveBuffer = (int32*)b2Alloc(m_moveCapacity * sizeof(int32)); 
} 

b2Alloc機能はシンプルです:

void* b2Alloc(int32 size) 
{ 
    return malloc(size); 
} 

そしてコメントアウトb2Allocを呼び出す2行は、ライブラリがリンクされていないときにエラーになりますが、明らかにそれは問題の解決ではありません。

他の人にも同様の問題がありましたが、すべての問題がXcodeコンパイルで発生していることがわかりましたが、この問題をモノラルタッチでどのように修正できるかはわかりません。

編集:マーク・旅館の答えを受けて、私は次のコマンドラインでlibがアップロードしています追加したい:

libには以下のようにC++でアップロードされていることを意味する必要があり
-gcc_flags "-L${ProjectDir} -lBox2D -cxx -force_load 
${ProjectDir}/libBox2D.a" 

this documentation

答えて

3

それは少し混乱することができなく-cxxのmTouchに、そうでないと(直接GCCコンパイラに渡される)--gcc_flagsのための余分なパラメータです。

ので、余分な引数は、ようになっているはずのmTouch:gccの代わりに使用されます++グラムを保証します

-cxx -gcc_flags "-L${ProjectDir} -lBox2D -force_load ${ProjectDir}/libBox2D.a" 

-cxx - 、それはあなたの問題を解決する必要があります。

+1

ドキュメンテーションWebページは-cxx – poupou

+0

の混乱を避けるための例で更新されましたあなた! – tweetypi

1

C++の代わりにCのようにリンクしているように見えるので、適切な標準ライブラリが得られません。

+0

のために完璧に働いていた、私は図書館があるに渡すために使用している引数は:「-L $ {} PROJECTDIR -lBox2D -gcc_flags - cxx -force_load $ {ProjectDir} /libBox2D.a "私の理解から、-cxxフラグはlibにC++としてリンクすることを保証します – tweetypi

3

変更mmの.mファイルが、それは私がちょうどダブルチェックを私

関連する問題