【问题标题】:Create (Cmake) C/C++ Library to Android without Android Studio在没有 Android Studio 的情况下为 Android 创建(Cmake)C/C++ 库
【发布时间】:2018-09-05 11:18:58
【问题描述】:

我的目标是创建一个用 C/C++ 制作的外部库,我可以将其导入到我的 Android 项目中。

我知道如何导入,我知道如何使用 JNI、Cmake 等从 C/C++ 内部项目创建库. 但这不是我的目标。

为此,我使用小步骤,首先使用一个简单的库:

gmath.c

#include "gmath.h"

#if defined(__GNUC__) && __GNUC__ >= 4
#define GMATH_EXPORT __attribute__((visibility("default")))
#elif defined(__SUNPRO_C) && (__SUNPRO_C >= 0x590)
#define GMATH_EXPORT __attribute__((visibility("default")))
#else
#define GMATH_EXPORT
#endif

GMATH_EXPORT unsigned gpower(unsigned n) {
    return 44;
}

gmath.h

#ifndef __POWER_HPP__
#define __POWER_HPP__
/*
 * return pow(2, n)
*/
#ifdef __cplusplus
extern "C"
#endif // __cplusplus
       unsigned gpower(unsigned n);

#endif //__POWER_HPP__

我正在使用什么来创建库: cmake -DCMAKE_TOOLCHAIN_FILE= /Users/vcanato/Library/Android/sdk/cmake/3.6.4111459/android.toolchain.cmake -DCMAKE_MAKE_PROGRAM= /Users/vcanato/Library/Android/sdk/ndk-bundle/ -DANDROID_ABI="arm64-v8a"

CMake

cmake_minimum_required(VERSION 3.4.1)

set(CMAKE_VERBOSE_MAKEFILE on)

set(CMAKE_TOOLCHAIN_FILE "/Users/vcanato/Library/Android/sdk/cmake/3.6.4111459/android.toolchain.cmake")
set(ANDROID_NDK "/Users/vcanato/Library/Android/sdk/ndk-bundle/")

add_library(gmath STATIC src/gmath.c)

set(distribution_DIR "${CMAKE_CURRENT_SOURCE_DIR}/../../../../../distribution")
set_target_properties(gmath
                  PROPERTIES
                  ARCHIVE_OUTPUT_DIRECTORY
                  "${distribution_DIR}/gmath/lib/${ANDROID_ABI}")

问题是,当我使用lipo -info libgmath.aby 终端时,它会显示不同的 ABI:

如何使用权限参数将此外部库构建到 android?

【问题讨论】:

  • cmake ... 调用期间,它应该输出关于使用了工具链,使用了哪个编译器等等。该输出是否对应于Android?您可以将该输出添加到问题帖子中,以便我们进行检查。顺便说一句,在CMakeLists.txt 中非常推荐使用project(...) 调用。虽然 CMake 可能会自动执行此类调用,但它可能会遗漏一些细节。提示:如果你想为所有静态库指定输出目录,你可以设置CMAKE_ARCHIVE_OUTPUT_DIRECTORY变量而不是设置属性ARCHIVE_OUTPUT_DIRECTORY

标签: android c++ cmake android-ndk java-native-interface


【解决方案1】:

使用 ndk 中的 cmake 工具链,而不是 sdk:

cmake -DCMAKE_TOOLCHAIN_FILE= /Users/vcanato/Library/Android/sdk/ndk-bundle/build/cmake/android.toolchain.cmake  -DCMAKE_MAKE_PROGRAM= /Users/vcanato/Library/Android/sdk/ndk-bundle/ -DANDROID_ABI="arm64-v8a"

【讨论】:

猜你喜欢
  • 2018-06-11
  • 2021-08-16
  • 1970-01-01
  • 2015-05-24
  • 2014-02-20
  • 2020-06-13
  • 1970-01-01
  • 2013-03-26
  • 2017-01-07
相关资源
最近更新 更多