Ubuntu 下編譯運作 Box2D 作者: 劉鵬 日期: 2009-03-16 本文介紹了在 Ubuntu 下編譯運作 Box2D 的過程、方法和注意事項。
我的環境
- Ubuntu 8.10
- OpenGL
- glut
下面介紹我的編譯和安裝步驟。
下載下傳正确的源碼包
下載下傳 Box2D_v2.0.1-cmake.tar.bz2 檔案,連結位址是 http://www.box2d.org/forum/download/file.php?id=365
注意,不能使用 box2d 首頁上提供的源碼包,我最初使用那個包,編譯報錯,出錯資訊如下所示:
Dynamics/Contacts/b2PolyContact.cpp:53: error: ‘memcpy’ was not declared in this scope
解壓包并修改 Makefile 檔案
解壓下載下傳的包,進入 Box2D_v2.0.1-cmake/Box2D 目錄,Makefile 裡有幾行是 作者寫死寫的源檔案路徑,你的目錄往往與該作者的路徑不同,需要修改成自己的路徑。在 Makefile 中搜尋 drayan ,把路徑改成自己的。我的修改如下所示:
...
# The top-level source directory on which CMake was run.
CMAKE_SOURCE_DIR = /home/liupeng/work/box2d/box2d_cmake/Box2D_v2.0.1-cmake/Box2D
# The top-level build directory on which CMake was run.
CMAKE_BINARY_DIR = /home/liupeng/work/box2d/box2d_cmake/Box2D_v2.0.1-cmake/Box2D
...
# The main all target
all: cmake_check_build_system
$(CMAKE_COMMAND) -E cmake_progress_start /
/home/liupeng/work/box2d/box2d_cmake/Box2D_v2.0.1-cmake/Box2D/CMakeFiles /
/home/liupeng/work/box2d/box2d_cmake/Box2D_v2.0.1-cmake/Box2D/CMakeFiles/progress.make
$(MAKE) -f CMakeFiles/Makefile2 all
$(CMAKE_COMMAND) -E cmake_progress_start /home/liupeng/work/box2d/box2d_cmake/Box2D_v2.0.1-cmake/Box2D/CMakeFiles 0
.PHONY : all
下載下傳并安裝 GLUI 庫
box2d 在 linux 下運作需要使用 GLUI 庫,GLUI 是一個基于 GLUT 的使用 C++ 開發的 GUI 庫,它為 OpenGL 應用程式提供了許多控件,如 button, checkbox, radio button, spinner 等。它獨立于視窗系統,使用 GLUT 或者 FreeGLUT。
從 http://sourceforge.net/projects/glui/ 下載下傳,我下的是 2.36 版本。
解開壓縮包,進入 glui-2.36/src 目錄,運作 make ,之後在 glui-2.36/src/lib 目錄下的 libglui.a 是編譯出來的靜态庫,在 glui-2.36/src/inlcude/GL 目錄下的 glui.h 是頭檔案。
将 libgui.a 拷到 /usr/lib 目錄下,将 glui.h 拷到 /usr/include 目錄下。
修改 TestBed 的 Makefile
安裝了 GLUI 後還需修改 TestBed 的 Makefile 檔案,将 GLUI 庫和頭檔案路徑改成你自己的。
進入 Box2D_v2.0.1-cmake/Box2D/Examples/TestBed 目錄,打開 Makefile 檔案,修改 PROJECT, CXXFLAGS ,LDFLAGS 三項。我的 GLUI 庫和頭檔案都放在 /usr 目錄,我把 PROJECT 改成 /usr,CXXFLAGS 和 LDFLAGS 分别做想應修改。
如下面的代碼所示。
TARGETS= Gen/float/testbed Gen/fixed/testbed
#PROJECT= ../..
PROJECT= /usr
#CXXFLAGS= -g -O2 -I$(PROJECT)/Contrib -I$(PROJECT)/Include -DGLUI_FREEGLUT
CXXFLAGS= -g -O2 -I$(PROJECT)/lib -I$(PROJECT)/include -DGLUI_FREEGLUT
#LDFLAGS= -L$(PROJECT)/Contrib/freeglut -L$(PROJECT)/Contrib/glui /
LDFLAGS= -L$(PROJECT)/lib -L$(PROJECT)/lib /
... ...
編譯 Box2D
回到 Box2D_v2.0.1-cmake/Box2D 目錄,運作 make ,不出意外可以正常編譯通過了。此時在 Box2D_v2.0.1-cmake/Box2D/Examples 目錄下可以看到編譯出來的可執行檔案了:helloworld 和 framework.
運作 framework,應該可以看到 testbed 運作起來了,截圖如下所示:
![](https://img.laitimes.com/img/_0nNw4CM6IyYiwiM6ICdiwiIn5GcuU2ah12YfRmM49mYvw1cjl2c5hGcvw1cldWYtl2Lc52YuM3YphGchJ3Z4VnbpxmL3d3dvw1LcpDc0RHaiojIsJye.png)
參考
- Box2D with Linux
- Linux (Ubuntu) Intalling Problems and Guide discussion at Box2D forum