android2.2编译,Android NDK编译Box2D_V2.2
如果大家有留意的话,就知道现在很流行的 愤怒的小鸟 的物理引擎是使用了Box2D,那么如何将这好东西移植到Android上呢?在网上找了一遍,发现资料还是少得可怜,于是自己研究研究一下,遇到问题就google一下~
其实用ndk编译Box2D,无非就是那么几个问题:
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)
将这些问题逐个击破就可以了。
我使用的测试例子是Box2D自带的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))
目的是生成 一个可执行的文件。
以下是编译Box2D的文件,目的是生成一个静态连接库:
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)
好了,准备的功夫就绪了,ndk-build吧。
然后就XXXXXXXXXXXXXXXXXXXXX
XXXXXXXXXXXXXXXXXXXXXXXX
XXXXXXXXXXXXXXXXXXXXXXX
一堆错误。
毕竟ndk编译还是有一点不足,那么我们就要对源码进行移向的修改,修改记录如下:
/***************************************************************************************************/
Box2D/Common/b2Math.h 注释#include
//float32 infinity = std::numeric_limits::infinity(); 修改为以下
float32 infinity = INFINITY;
/***************************************************************************************************/
Box2D/Collision/b2BroadPhase.h 注释#include
// 添加一个头文件 #include
// 添加一个方法
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
/***************************************************************************************************/
好了,好了,再编译一下吧。一切顺利了吧~
最后会生成 helloworld的可执行文件,将它push 到模拟器运行一下,好了,没问题了~
修改过的源码下载地址 :
个人是比较懒了,不想多说了。^^
android2.2编译,Android NDK编译Box2D_V2.2相关推荐
- 【错误记录】Android NDK 编译报错 ( no known conversion from ‘unsigned char *‘ to ‘const char *‘ )
文章目录 一.报错信息 二.解决方案 一.报错信息 在 Visual Studio 2019 中编译 Android NDK , 构建方式参考 [Android 逆向]Android 进程注入工具开发 ...
- Android NDK编译中在libs\armeabi中加入第三方so库文件的方法
Android NDK编译中在libs\armeabi中加入第三方so库文件的方法 假设要加入库文件的名字为libffmpeg.so文件 1.要在project\jni目录下新建一目录prebuilt ...
- android.mk ndk编译选项优化,Android NDK 编译脚本分析 之一
版权信息:本文为本人原创,欢迎转载,但请著明出处,并保留本版权信息. Android NDK编译脚本编写起来还是是比较简单条理的,然而它的语法和传统的linux GNU Make编译脚本的编写似乎有很 ...
- NDK编译php,Android NDK编译常见错误及解决方案
Android NDK编译常见错误及解决方案 Error 1:$ ndk-build/cygdrive/c/andy/abc/obj/local/armeabi-v7a/objs/abc//hello ...
- Android NDK 编译PjSip 2.6 之 搭建PjSip apk开发环境 (三)
Android NDK 编译PjSip 2.6 之 PjSip编译 (二)中已经把so 和java文件编译出来.可以开始搭建apk的开发环境. 我们导入PjSip的example apk程序,编译生成 ...
- android jni不适用ndk,Android NDK编译之undefined reference to 'JNI_CreateJavaVM'
利用Android NDK编译动态库,在C文件中调用了两个JNI函数:JNI_GetDefaultJavaVMInitArgs和JNI_CreateJavaVM.编译的时候始终报以下错误: XXX: ...
- android中ndk编译错误,Android NDK编译常见错误及解决方案
Android NDK编译常见错误及解决方案 Error 1:$ ndk-build/cygdrive/c/andy/abc/obj/local/armeabi-v7a/objs/abc//hello ...
- android 编译 sdl,使用android ndk编译SDL2示例错误r14
我已经测试过在我的ubuntu 16.04机器上构建SDL2源代码(2.0.5)中的示例.使用android ndk编译SDL2示例错误r14 根据https://wiki.libsdl.org/An ...
- ugui 转轮_Unity3D研究院之Android NDK编译C/C++结合Unity实现本地数据共享(二十八)...
开始本篇文章之前我先为大家简单的介绍一下Android NDK编程的原理, 我们知道Android开发使用JAVA语言来编程它的运行效率要比C/C++低很多,为了让JAVA语言可以调用 C/C++ 这 ...
最新文章
- java类获取声明,获取用于MethodInvocation的实际类而不是声明类 - java
- 调用枚举接口重写方法提示找不到符号_看看人家那后端API接口写得,那叫一个巴适~...
- 监控程序崩溃重启_第十四章 Homeassistant服务器安全及状态监控(下)
- 被惊艳到了!适用 Win、Mac、Linux,酷炫的极客界面 eDEX-UI
- Android 换肤功能的实现(Apk插件方式)
- Hadoop平台简述
- 简单工厂模式-Simple Factory Pattern
- iOS - 数组字典模型根据模型属性key排序
- 能直接替代替换RC522/CV520的13.56MHz高频读写芯片,太棒了
- python使用moviepy包下的VideoFileClip时报错:OSError: [WinError 6] 句柄无效解决方法
- eclipse开发桌面应用软件程序教程
- 智能水杯设计方案_智能水杯方案的结构、理念、特点
- 自动编码器在野外去除遮挡_在野外作曲
- eclipse与DW联合开发java web项目
- Log4j写日志文件使用详解
- 基于Matlab软件的视觉导航系统的仿真
- java计算机毕业设计-线上自助旅游报名网-源程序+mysql+系统+lw文档+远程调试
- 人民币升值和贬值的影响
- C语言电话号码判断合法性
- nCode:DesignLife案例教程十八
热门文章
- 想让关系更好就不要怕麻烦
- pycharm设置编写的脚本页面长行实现自动换行(windows版)
- Python机器学习——Agglomerative层次聚类
- 预测汽车级Linux专业技术的需求
- web站点的欢迎页面
- [JAVAEE] 初识ThymeLeaf
- mysql屏蔽关键字实现方法_PHP屏蔽过滤指定关键字的方法
- python 2x xlrd使用merged_cells 读取的合并单元格为空
- Waiting for target device to come online
- Binary XML file line #39: 最多只支持3个子View,Most only support three sub vi