【问题标题】:Build Android NDK project with Cmake使用 Cmake 构建 Android NDK 项目
【发布时间】:2013-10-13 00:23:05
【问题描述】:

我想用 android NDK 和 Cmake 生成我的 android 原生应用程序,所以我下载了 android-cmake 工具链。

Cmake 成功生成我的项目,但是当我尝试进入生成目录并尝试运行“make”时,出现以下错误:

-- Configuring done
-- Generating done
-- Build files have been written to: /Users/ldz/Desktop/myProject
[  1%] Building CXX object Project/src/Main/Core/CMakeFiles/Core.dir/Main/Main.cpp.o
arm-linux-androideabi-g++: error: unrecognized command line option '-stdlib=libc++'

不知道这里出了什么问题,我的项目用的是C++11,这是我的g++ --version结果:

Configured with: --prefix=/Applications/Xcode.app/Contents/Developer/usr --with-gxx-include-dir=/usr/include/c++/4.2.1
Apple LLVM version 5.0 (clang-500.2.76) (based on LLVM 3.3svn)
Target: x86_64-apple-darwin12.5.0
Thread model: posix

谢谢!

【问题讨论】:

标签: gcc android-ndk makefile cmake


【解决方案1】:

要使用 Cmake 构建 Android NDK 项目并创建 APK,您应该这样做:

  • 您应该使用fork from taka-no-me,而不是使用android-cmake。
  • 然后使用Apk.cmake from pixellight。还从这个 repo 复制 [AndroidManifest.xml.in, LoadLibraries.java.in, strings.xml.in]。
  • 有一个像这样的 CMakeLists.txt:
    cmake_minimum_required(版本 2.8.3) 项目(testBuilder) 包括(“Apk.cmake”需要) include_directories(${ANDROID_NDK}/sources/android/native_app_glue) 设置(TEST_SRC ${ANDROID_NDK}/sources/android/native_app_glue/android_native_app_glue.c src/Main.cpp ) 设置(CMAKE_CXX_FLAGS "${CMAKE_CXX_FLAGS} -std=c++0x -ffor-scope -fno-rtti -fno-exceptions -pipe -ffunction-sections -fdata-sections -ffast-math -Wnon-virtual-dtor -Wreorder - Wsign-promo -fvisibility=hidden -fvisibility-inlines-hidden -Wstrict-null-sentinel -Os -funroll-all-loops -fpeel-loops -ftree-vectorize") set(LINKER_FLAGS "${LINKER_FLAGS} -Wl,--根据需要 -Wl,--gc-sections -Wl,--no-undefined -Wl,--strip-all -Wl,-rpath-link=${ ANDROID_NDK_SYSROOT}/usr/lib/-L${ANDROID_NDK_SYSROOT}/usr/lib/") add_library(测试共享 ${TEST_SRC}) target_link_libraries(测试日志android) set_target_properties(测试属性 COMPILE_DEFINITIONS “ANDROID”) 设置(APP_SHARED_LIBRARIES ${LIBRARY_OUTPUT_PATH}/libtest.so) android_create_apk(测试“${CMAKE_BINARY_DIR}/apk”“${APP_SHARED_LIBRARIES}”“”“数据”)

这是 Main.cpp

#include <android_native_app_glue.h>
#include <android/log.h>

#define APPNAME "TestApp"

void android_main(struct android_app* state)
{
    app_dummy(); // Make sure glue isn't stripped

    __android_log_print(ANDROID_LOG_INFO, APPNAME, "HolyShit you did it !");

    ANativeActivity_finish(state->activity);
}

【讨论】:

  • 在获得我的支持之前,这个答案几乎是完整的,我该如何使用来自 TakaNoMe 的脚本?我没有看到它的教程。一个示例 Cmake 命令行调用?谢谢
  • 不要使用 Android cmake fork,而是使用 NDK 附带的 android.toolchain 文件(需要 CMake 3.6)
【解决方案2】:

基于 Vi.:s 的回答,我在 github 上克隆了一个 android-cmake,并添加了一个名为 android.apk.cmake 的修改后的 Apk.cmake。我使用 NativeActivity 而不是 pixellight:s LoadLibraries.java。

克隆在这里: https://github.com/Discordia/android-cmake

我在 Vi.:s 中创建了示例答案: https://github.com/Discordia/android-cmake-example

【讨论】:

  • 请提出拉取请求以将此更改放入 taka-no-me 的存储库中。
猜你喜欢
  • 2019-06-25
  • 2018-09-17
  • 1970-01-01
  • 1970-01-01
  • 2014-09-23
  • 2012-01-25
  • 2018-02-17
  • 2012-03-30
  • 1970-01-01
相关资源
最近更新 更多