编译错误结果“架构i386的未定义符号”

问题描述:

我已经编译了Xcode中的Box2D库,它生成了一个静态库文件。编译错误结果“架构i386的未定义符号”

我将这个库链接到单触式,但是当我尝试编译时,我得到了各种源文件中未定义符号的错误。

我看了前几个,他们似乎是在抱怨指针初始化(即使用的malloc /新的),例如:

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的两行会在链接库链接消失时发生错误,但显然这不是解决问题的方法。

我发现其他人有类似的问题,但他们所有的问题一直与Xcode编译,我不知道我怎么能解决这个问题在单点触摸?

编辑:针对马克烧烤答案,我想补充我加载了下面的命令行下的lib:

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

这应该意味着LIB加载了C++作为每this documentation

它可以是一个有点混乱但-cxx是一个额外的参数的mTouch,不为--gcc_flags(其直接传递给GCC编译器)。

所以mTouch触摸额外的参数应该是这样的:

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

-cxx将确保++被用来代替GCC摹 - 这应该解决您的问题。

+1

文档网页已更新示例,以避免混淆-cxx – poupou

+0

是的工作,谢谢你先生! – tweetypi

这听起来乍一看像你连接为C而不是C++,所以它没有得到正确的标准库。

+0

我只是双重检查,我使用的是通过在图书馆的说法:-gcc_flags“-L $ {} PROJECTDIR -lBox2D - cxx -force_load $ {ProjectDir} /libBox2D.a“从我的理解-cxx标志确保它链接lib作为C++ – tweetypi

更改.m文件到毫米,它的工作完美的我