使用CMake为Android编译花栗鼠2D

使用CMake为Android编译花栗鼠2D,android,android-ndk,cmake,chipmunk,Android,Android Ndk,Cmake,Chipmunk,我想在Android上使用 在示例Chipmunk2D/android/android.mk中,他们讨论了使用CMake为android构建Chipmunk2D。根据添加此文件时提交的评论,我使用构建一个静态库,然后将其链接到我的Android项目中 我这样调用它: cd Chipmunk2D/ cmake -DCMAKE_TOOLCHAIN_FILE=../android-cmake/android.toolchain.cmake \ -DANDROID_NDK=~/ndk \

我想在Android上使用

在示例Chipmunk2D/android/android.mk中,他们讨论了使用CMake为android构建Chipmunk2D。根据添加此文件时提交的评论,我使用构建一个静态库,然后将其链接到我的Android项目中

我这样调用它:

cd Chipmunk2D/
cmake -DCMAKE_TOOLCHAIN_FILE=../android-cmake/android.toolchain.cmake \
      -DANDROID_NDK=~/ndk \
      -DCMAKE_BUILD_TYPE=Release \
      -DANDROID_ABI="armeabi" .
cmake --build .
其中Chipmunk2D是包含Chipmunk2D项目的文件夹,android cmake包含android cmake,~/ndk是指向android-ndk-r10的符号链接

似乎生成的.a不是为Android编译的,而是为我的本地主机编译的,因为:

在为我的主机编译并尝试为Android编译之后,CMake什么也不做,即认为目标已完成。 当Android链接时,ld抱怨没有存档符号表运行ranlib,并且对Chipmunk2D函数的未定义引用存在错误。 我目前的解决方案是编写一个与此类似的Android.mk:警告,这已经过时了。但是我正在重新发明如何构建花栗鼠2D,我可能会错过项目作者提供的一些构建配置

如何使用CMake为Android构建花栗鼠2D?

以下是我所做的。 在Chipmunk2D顶级源目录中创建一个名为Android.mk的文件,如下所示。不要忘记更改本地包含路径以匹配您的位置

LOCAL_PATH := $(call my-dir)

include $(CLEAR_VARS)

CHIPMUNK_SOURCES := src/chipmunk.c src/cpArbiter.c src/cpArray.c src/cpBBTree.c src/cpBody.c src/cpCollision.c src/cpConstraint.c src/cpDampedRotarySpring.c src/cpDampedSpring.c src/cpGearJoint.c src/cpGrooveJoint.c src/cpHashSet.c src/cpHastySpace.c src/cpMarch.c src/cpPinJoint.c src/cpPivotJoint.c src/cpPolyline.c src/cpPolyShape.c src/cpRatchetJoint.c src/cpRotaryLimitJoint.c src/cpShape.c src/cpSimpleMotor.c src/cpSlideJoint.c src/cpSpace.c src/cpSpaceComponent.c src/cpSpaceDebug.c src/cpSpaceHash.c src/cpSpaceQuery.c src/cpSpaceStep.c src/cpSpatialIndex.c src/cpSweep1D.c

LOCAL_MODULE    := chipmunk
LOCAL_SRC_FILES := $(CHIPMUNK_SOURCES)

LOCAL_C_INCLUDES := \
$(HOME)/src/Chipmunk2D/include

LOCAL_CFLAGS += -DCP_USE_DOUBLES=0 -DCP_USE_CGPOINTS=0 -D__ARM_NEON__

LOCAL_ARM_NEON := true

include $(BUILD_STATIC_LIBRARY)
然后,在您自己的项目中,将其添加到MyAwesomeGame/Android/jni/Android.mk

还要确保NDK_MODULE_PATH环境变量可以找到您的Chipmunk2D源目录。我的包括$HOME/src,因为我在$HOME/src/Chipmunk2D中有花栗鼠来源/

现在,如果您构建自己的Android应用程序,将自动构建花栗鼠静态库:

$ cd MyAwesomeGame/Android
$ ndk-build
$ cd MyAwesomeGame/Android
$ ndk-build