我打算在我的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
标头目录我错过了什么?我应该添加任何特定的库或命令参数吗?
答案 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