我在Xcode中编译了Box2D库,它生成了一个静态库文件。
我将此库链接到单声道触摸,但是当我尝试编译时,我在各种源文件中收到有关未定义符号的错误。
我看过前几个,他们似乎在抱怨指针初始化(例如使用malloc / new),例如:
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编译的,我不知道如何用单声道触摸解决这个问题?
编辑:为了回应Mark Bs的回答我想添加我用以下命令行加载lib:
-gcc_flags "-L${ProjectDir} -lBox2D -cxx -force_load
${ProjectDir}/libBox2D.a"
这应该意味着lib按照this documentation
加载了C ++答案 0 :(得分:3)
这可能有点令人困惑,但 -cxx 是 mtouch 的额外参数,而不是--gcc_flags(直接传递给 gcc < strong>编译器。)
所以mtouch额外的参数应该是这样的:
-cxx -gcc_flags "-L${ProjectDir} -lBox2D -force_load ${ProjectDir}/libBox2D.a"
-cxx 将确保使用g ++代替gcc - 这应该可以解决您的问题。
答案 1 :(得分:3)
将.m文件更改为mm,它对我来说非常合适
答案 2 :(得分:1)
乍一看,您将链接为C而不是C ++,因此无法获得正确的标准库。