【问题标题】:How to fix undefined reference to `b2World::b2World(b2Vec2 const&)'如何修复对 `b2World::b2World(b2Vec2 const&)' 的未定义引用
【发布时间】:2016-12-15 14:03:43
【问题描述】:

main.cpp

#include <iostream>
#include <Box2D/Box2D.h>

int main() {
    int32 velocityIterations = 6;
    int32 positionIterations = 2;
    b2Vec2 gravity(0.0f, -10.0f);
    b2World world(gravity);

    std::cout << "Hello, world!" << std::endl;
}

我得到的错误:

对 `b2World::b2World(b2Vec2 const&)' 的未定义引用

当我尝试在 CMakeLists.txt 中链接 Box2D 时:

include_directories(C:/Users/blahblah/CPPLibs)
target_link_libraries(HelloWorld Box2D)

我明白了:

c:/mingw/bin/../lib/gcc/x86_64-w64-mingw32/6.1.0/../../../../x86_64-w64-mingw32/bin/ld.exe : 找不到 -lBox2D

如何将 Box2D 正确导入我的项目?

【问题讨论】:

  • 创建 b2World 构造函数
  • @MichelJord 我做了b2World world(gravity);,怎么了?

标签: c++ box2d clion


【解决方案1】:

您无法编译,因为您的链接器找不到 Box2D 源文件。您必须手动添加 .cpp 文件(这是一个糟糕的解决方案)或使用 Box2D 源代码创建静态库(例如 .../Box2D_v2.3.0/Box2D/Box2D)。生成的文件(例如 libBox2D.a)添加到您的项目中,它应该可以毫无问题地编译。

【讨论】:

  • 如何生成 .a 文件?
  • 如果你能添加如何一步一步地制作它,我是 C++ 新手。我试过这个:jantzeno.github.io/2013/08/06/Box2D-command-line.html 但它对我不起作用。
  • 您可以使用 Code::Blocks 生成 .a 文件。创建新项目并选择“静态库”。然后你可以删除 main.c 文件,因为它没用。接下来右键单击您的项目图标并选择“递归添加文件”。选择路径 /Box2D_v2.3.0/Box2D/Box2D。然后选择项目 -> 构建选项 -> 搜索目录 -> 编译器 -> 添加并选择 /Box2D_v2.3.0/Box2D。编译并享受 ;)
  • Code::Blocks 是一个 IDE(CLion 是更好的 IMO),它可以与 CLion 发生冲突。我必须安装它才能制作 .a 文件吗?如果你有 Code::Blocks 你能帮我做吗?如果没有,无论如何我都会做到的;)
  • 找到可移植的 Code::Blocks。我会尝试编译它。如果失败了,我会告诉你的。
猜你喜欢
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 2016-12-10
相关资源
最近更新 更多