【问题标题】:Compiling Chipmunk2D for Android using CMake使用 CMake 为 Android 编译 Chipmunk2D
【发布时间】:2015-04-16 05:35:27
【问题描述】:

我想在 Android 上使用 Chipmunk2D

在示例Chipmunk2D/android/Android.mk 中,他们谈到了使用 CMake 为 Android 构建 Chipmunk2d。根据添加此文件时提交的评论建议,我使用 Android-CMake 构建一个静态库,然后将其链接到我的 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 编译的,而是为我的本地主机编译的,因为:

  1. 为我的主机编译并尝试为 Android 编译后,CMake 什么都不做,即认为目标已完成。
  2. 当为 Android ld 链接时抱怨“没有存档符号表(运行 ranlib)”并且对 Chipmunk2D 函数的未定义引用存在错误。

我目前的解决方案是编写一个与此类似的 Android.mk:https://gist.github.com/kristianlm/2628615(警告,这是过时的)。但后来我正在重新发明如何构建 Chipmunk2D,我可能会遗漏项目作者的一些构建配置。

如何使用 CMake 为 Android 构建 Chipmunk2D?

【问题讨论】:

    标签: android android-ndk cmake chipmunk


    【解决方案1】:

    这就是我所做的。 像这样在 Chipmunk2D 顶级源目录中创建一个名为 Android.mk 的文件。 (不要忘记更改 LOCAL_C_INCLUDES 路径以匹配您的位置。)

    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

    LOCAL_STATIC_LIBRARIES := chipmunk
    
    ...
    
    $(call import-module,Chipmunk2D)
    

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

    现在,如果您构建自己的 Android 应用,Chipmunk 静态库将自动构建:

    $ cd MyAwesomeGame/Android
    $ ndk-build
    

    【讨论】:

      猜你喜欢
      • 2018-01-31
      • 2012-09-19
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 2014-07-10
      • 1970-01-01
      • 1970-01-01
      相关资源
      最近更新 更多