在Ubuntu 12.04上编译Box2D HelloWorld

时间:2014-05-08 22:34:02

标签: c++ ubuntu g++ box2d

我打算在我的C ++项目中使用Box2D。我已经下载了Box2D的最新版本(在问这个问题时为v2.3.0.7)并成功构建了它。我可以毫无错误地运行Testbed。

现在,我正在尝试构建HelloWorld.cpp示例,该示例位于HelloWorld源文件中的Box2D文件夹中,但我无法编译此示例。

以下是我的编译命令:

g++ -g -Wall -L/home/viki/Desktop/collision_test/Box2D_v2.3.0/Box2D/Build/Box2D -lBox2D -I/home/viki/Desktop/collision_test/Box2D_v2.3.0/Box2D HelloWorld.cpp -o Hello

这是我得到的输出:

/tmp/cc2U314E.o: In function `main':
/home/viki/Desktop/collision_test/test/HelloWorld.cpp:37: undefined reference to `b2World::b2World(b2Vec2 const&)'
/home/viki/Desktop/collision_test/test/HelloWorld.cpp:46: undefined reference to `b2World::CreateBody(b2BodyDef const*)'
/home/viki/Desktop/collision_test/test/HelloWorld.cpp:52: undefined reference to `b2PolygonShape::SetAsBox(float, float)'
/home/viki/Desktop/collision_test/test/HelloWorld.cpp:55: undefined reference to `b2Body::CreateFixture(b2Shape const*, float)'
/home/viki/Desktop/collision_test/test/HelloWorld.cpp:61: undefined reference to `b2World::CreateBody(b2BodyDef const*)'
/home/viki/Desktop/collision_test/test/HelloWorld.cpp:65: undefined reference to `b2PolygonShape::SetAsBox(float, float)'
/home/viki/Desktop/collision_test/test/HelloWorld.cpp:78: undefined reference to `b2Body::CreateFixture(b2FixtureDef const*)'
/home/viki/Desktop/collision_test/test/HelloWorld.cpp:92: undefined reference to `b2World::Step(float, int, int)'
/home/viki/Desktop/collision_test/test/HelloWorld.cpp:104: undefined reference to `b2World::~b2World()'
/home/viki/Desktop/collision_test/test/HelloWorld.cpp:104: undefined reference to `b2World::~b2World()'
/tmp/cc2U314E.o: In function `b2PolygonShape':
/home/viki/Desktop/collision_test/Box2D_v2.3.0/Box2D/Box2D/Collision/Shapes/b2PolygonShape.h:87: undefined reference to `vtable for b2PolygonShape'
/tmp/cc2U314E.o: In function `~b2PolygonShape':
/home/viki/Desktop/collision_test/Box2D_v2.3.0/Box2D/Box2D/Collision/Shapes/b2PolygonShape.h:28: undefined reference to `vtable for b2PolygonShape'
collect2: ld returned 1 exit status

我正在使用

    用于搜索-L
  • libBox2D.a标记
  • -l标记用于关联Box2D
  • -I标志,用于指向Box2D标头目录

我错过了什么?我应该添加任何特定的库或命令参数吗?

2 个答案:

答案 0 :(得分:2)

将-lBox2D放在HelloWorld.cpp

后面

答案 1 :(得分:1)

如果您已正确构建项目,则会自动为您构建HelloWorld示例。示例文件夹中的CMakeLists.txt文件只在文件夹中运行cmake CMakeLists.txt,然后运行make。在此之前,您必须已构建并安装Box2D库。这是我做的:

我进入Build内的Box2D目录并输入以下命令:

cmake -DBOX2D_INSTALL=ON -DBOX2D_BUILD_SHARED=ON -DCMAKE_INSTALL_PREFIX=/opt/Box2D ..

然后我走到Box2D目录的一个级别并运行make然后sudo make install

然后我进入HelloWorld目录并自动构建。我没有必要手动构建它。这也是make的输出,显示示例已构建:

Linking CXX static library libBox2D.a [ 42%] Built target Box2D [ 43%] Building CXX object HelloWorld/CMakeFiles/HelloWorld.dir/HelloWorld.cpp.o