日韩性视频-久久久蜜桃-www中文字幕-在线中文字幕av-亚洲欧美一区二区三区四区-撸久久-香蕉视频一区-久久无码精品丰满人妻-国产高潮av-激情福利社-日韩av网址大全-国产精品久久999-日本五十路在线-性欧美在线-久久99精品波多结衣一区-男女午夜免费视频-黑人极品ⅴideos精品欧美棵-人人妻人人澡人人爽精品欧美一区-日韩一区在线看-欧美a级在线免费观看

歡迎訪問 生活随笔!

生活随笔

當(dāng)前位置: 首頁(yè) > 人文社科 > 生活经验 >内容正文

生活经验

android2.2编译,Android NDK编译Box2D_V2.2

發(fā)布時(shí)間:2023/11/27 生活经验 34 豆豆
生活随笔 收集整理的這篇文章主要介紹了 android2.2编译,Android NDK编译Box2D_V2.2 小編覺得挺不錯(cuò)的,現(xiàn)在分享給大家,幫大家做個(gè)參考.

如果大家有留意的話,就知道現(xiàn)在很流行的 憤怒的小鳥 的物理引擎是使用了Box2D,那么如何將這好東西移植到Android上呢?在網(wǎng)上找了一遍,發(fā)現(xiàn)資料還是少得可憐,于是自己研究研究一下,遇到問題就google一下~

其實(shí)用ndk編譯Box2D,無非就是那么幾個(gè)問題:

Box2D/Common/b2Math.h:27:18: error: limits: No such file or directory

Box2D/Collision/b2BroadPhase.h:25:21: error: algorithm: No such file or directory

Box2D/Dynamics/b2Body.h:24:18: error: memory: No such file or directory

Box2D/Common/b2Math.h:39: error: 'numeric_limits' is not a member of 'std'

Box2D/Common/b2Math.h:39: error: '::infinity' has not been declared

Box2D/Collision/b2BroadPhase.h:207: error: 'sort' is not a member of 'std'

Box2D/Common/b2BlockAllocator.cpp:20:

android/android-ndk-r5b/sources/cxx-stl/system/include/cstdlib:53: error: '::clearenv' has not been declared

Box2D/Common/b2Settings.cpp:20:

Box2D/Dynamics/b2Body.cpp:162: error: no matching function for call to 'operator new(unsigned int, void*&)'

:0: note: candidates are: void* operator new(unsigned int)

將這些問題逐個(gè)擊破就可以了。

我使用的測(cè)試?yán)邮荁ox2D自帶的HelloWorld

那Android.mk就這樣寫了

LOCAL_PATH := $(call my-dir)

include $(CLEAR_VARS)

LOCAL_MODULE := helloworld

LOCAL_ARM_MODE := arm

LOCAL_SRC_FILES := HelloWorld.cpp

LOCAL_C_INCLUDES += $(LOCAL_PATH) \

$(LOCAL_PATH)/Box2D \

$(LOCAL_PATH)/Collision \

$(LOCAL_PATH)/Common \

$(LOCAL_PATH)/Dynamics \

$(LOCAL_PATH)/Rope

#LOCAL_LDIBS := -lstdc++

LOCAL_STATIC_LIBRARIES := libbox2d

include $(BUILD_EXECUTABLE)

##################################

include $(call all-makefiles-under,$(LOCAL_PATH))

目的是生成 一個(gè)可執(zhí)行的文件。

以下是編譯Box2D的文件,目的是生成一個(gè)靜態(tài)連接庫(kù):

Android.mk

LOCAL_PATH := $(call my-dir)

include $(CLEAR_VARS)

BOX2D_SRC_FILES += \

Collision/b2BroadPhase.cpp \

Collision/b2CollideCircle.cpp \

Collision/b2CollideEdge.cpp \

Collision/b2CollidePolygon.cpp \

Collision/b2Collision.cpp \

Collision/b2Distance.cpp \

Collision/b2DynamicTree.cpp \

Collision/b2TimeOfImpact.cpp \

Collision/Shapes/b2ChainShape.cpp \

Collision/Shapes/b2CircleShape.cpp \

Collision/Shapes/b2EdgeShape.cpp \

Collision/Shapes/b2PolygonShape.cpp \

Common/b2BlockAllocator.cpp \

Common/b2Draw.cpp \

Common/b2Math.cpp \

Common/b2Settings.cpp \

Common/b2StackAllocator.cpp \

Common/b2Timer.cpp \

Dynamics/b2Body.cpp \

Dynamics/b2ContactManager.cpp \

Dynamics/b2Fixture.cpp \

Dynamics/b2Island.cpp \

Dynamics/b2World.cpp \

Dynamics/b2WorldCallbacks.cpp \

Dynamics/Contacts/b2ChainAndCircleContact.cpp \

Dynamics/Contacts/b2ChainAndPolygonContact.cpp \

Dynamics/Contacts/b2CircleContact.cpp \

Dynamics/Contacts/b2Contact.cpp \

Dynamics/Contacts/b2ContactSolver.cpp \

Dynamics/Contacts/b2EdgeAndCircleContact.cpp \

Dynamics/Contacts/b2EdgeAndPolygonContact.cpp \

Dynamics/Contacts/b2PolygonAndCircleContact.cpp \

Dynamics/Contacts/b2PolygonContact.cpp \

Dynamics/Joints/b2DistanceJoint.cpp \

Dynamics/Joints/b2FrictionJoint.cpp \

Dynamics/Joints/b2GearJoint.cpp \

Dynamics/Joints/b2Joint.cpp \

Dynamics/Joints/b2MouseJoint.cpp \

Dynamics/Joints/b2PrismaticJoint.cpp \

Dynamics/Joints/b2PulleyJoint.cpp \

Dynamics/Joints/b2RevoluteJoint.cpp \

Dynamics/Joints/b2RopeJoint.cpp \

Dynamics/Joints/b2WeldJoint.cpp \

Dynamics/Joints/b2WheelJoint.cpp \

Rope/b2Rope.cpp

LOCAL_MODULE := box2d

LOCAL_C_INCLUDES += $(LOCAL_PATH) \

$(LOCAL_PATH)/../

LOCAL_SRC_FILES := $(BOX2D_SRC_FILES)

include $(BUILD_STATIC_LIBRARY)

好了,準(zhǔn)備的功夫就緒了,ndk-build吧。

然后就XXXXXXXXXXXXXXXXXXXXX

XXXXXXXXXXXXXXXXXXXXXXXX

XXXXXXXXXXXXXXXXXXXXXXX

一堆錯(cuò)誤。

畢竟ndk編譯還是有一點(diǎn)不足,那么我們就要對(duì)源碼進(jìn)行移向的修改,修改記錄如下:

/***************************************************************************************************/

Box2D/Common/b2Math.h 注釋#include

//float32 infinity = std::numeric_limits::infinity(); 修改為以下

float32 infinity = INFINITY;

/***************************************************************************************************/

Box2D/Collision/b2BroadPhase.h 注釋#include

// 添加一個(gè)頭文件 #include

// 添加一個(gè)方法

static int b2PairQSORTLessThan (const void*element1, const void*element2)

{

b2Pair *pair1 = (b2Pair*)element1;

b2Pair *pair2 = (b2Pair*)element2;

if (pair1->proxyIdA < pair2->proxyIdA)

return -1;

else if (pair1->proxyIdA > pair2->proxyIdA)

return 1;

else {

if (pair1->proxyIdB < pair2->proxyIdB)

return -1;

else if (pair1->proxyIdB > pair2->proxyIdB)

return 1;

}

return 0;

}

//std::sort(m_pairBuffer, m_pairBuffer + m_pairCount, b2PairLessThan);修改為以下

qsort (m_pairBuffer, m_pairCount, sizeof (b2Pair), b2PairQSORTLessThan);

/***************************************************************************************************/

Box2D/Dynamics/b2Body.h

注釋#include

添加頭文件 #include

/***************************************************************************************************/

Box2D/Common/b2BlockAllocator.cpp //#include 注釋掉

// 添加頭文件

#include

//#include 注釋掉

// 添加頭文件

#include

/***************************************************************************************************/

Box2D/Common/b2Settings.cpp

//#include 注釋掉

// 添加頭文件

#include

/***************************************************************************************************/

Box2D/Dynamics/b2Body.cpp

// 添加頭文件

#include

/***************************************************************************************************/

好了,好了,再編譯一下吧。一切順利了吧~

最后會(huì)生成 helloworld的可執(zhí)行文件,將它push 到模擬器運(yùn)行一下,好了,沒問題了~

修改過的源碼下載地址 :

個(gè)人是比較懶了,不想多說了。^^

總結(jié)

以上是生活随笔為你收集整理的android2.2编译,Android NDK编译Box2D_V2.2的全部?jī)?nèi)容,希望文章能夠幫你解決所遇到的問題。

如果覺得生活随笔網(wǎng)站內(nèi)容還不錯(cuò),歡迎將生活随笔推薦給好友。