Я скомпилировал библиотеку Box2D в Xcode, которая сгенерировала статический файл библиотеки.
Я связал эту библиотеку с mono touch, но когда я пытаюсь скомпилировать, я получаю ошибки о неопределенных символах в различных исходных файлах.
Я посмотрел первые несколько, и они, кажется, жалуются на инициализацию указателя (то есть используя 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, я не уверен, как я мог решить эту проблему в моно касании?
edit: В ответ на ответ Mark Bs, который я хотел бы добавить, я загружаю библиотеку следующей командной строкой:
-gcc_flags "-L${ProjectDir} -lBox2D -cxx -force_load
${ProjectDir}/libBox2D.a"
Что должно означать, что библиотека загружена с C ++ согласно этой документации