【问题标题】:Compiling results in error "undefined symbols for architecture i386"编译导致错误“架构 i386 的未定义符号”
【发布时间】:2011-08-13 12:49:14
【问题描述】:

我在 Xcode 中编译了 Box2D 库,生成了一个静态库文件。

我将此库链接到 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 编译有关,我不确定如何通过单声道解决此问题?

编辑:为了回应 Mark Bs 的回答,我想补充一下,我正在使用以下命令行加载库:

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

这应该意味着根据 this documentation 加载了 C++ 库

【问题讨论】:

    标签: c++ ios xcode mono xamarin.ios


    【解决方案1】:

    这可能有点混乱,但 -cxxmtouch 的额外参数,而不是 --gcc_flags(直接传递给 gcc 编译器)。

    所以 mtouch 额外的参数应该是这样的:

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

    -cxx 将确保使用 g++ 而不是 gcc - 这应该可以解决您的问题。

    【讨论】:

    • 文档网页已更新为示例以避免混淆 -cxx
    【解决方案2】:

    将 .m 文件更改为 mm,它对我来说非常有效

    【讨论】:

      【解决方案3】:

      乍一看,您似乎是在以 C 而不是 C++ 进行链接,因此它没有获得正确的标准库。

      【讨论】:

      • 我只是仔细检查了一下,我用来传递库的参数是:-gcc_flags "-L${ProjectDir} -lBox2D -cxx -force_load ${ProjectDir}/libBox2D.a"据我了解,-cxx 标志确保它将库链接为 C++
      猜你喜欢
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 2011-08-14
      • 1970-01-01
      相关资源
      最近更新 更多