编译错误结果“架构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摹 - 这应该解决您的问题。
这听起来乍一看像你连接为C而不是C++,所以它没有得到正确的标准库。
我只是双重检查,我使用的是通过在图书馆的说法:-gcc_flags“-L $ {} PROJECTDIR -lBox2D - cxx -force_load $ {ProjectDir} /libBox2D.a“从我的理解-cxx标志确保它链接lib作为C++ – tweetypi
更改.m文件到毫米,它的工作完美的我
文档网页已更新示例,以避免混淆-cxx – poupou
是的工作,谢谢你先生! – tweetypi