Создание (Cmake) библиотеки C / C ++ для Android без Android Studio - PullRequest
0 голосов
/ 05 сентября 2018

Моя цель - создать внешнюю библиотеку, созданную на C / C ++, которую я могу импортировать в свой проект Android.

Я знаю, как импортировать , я знаю, как создать библиотеку из C / C ++ внутри проекта с использованием JNI, Cmake и т. Д. Но это не моя цель.

Для этого я использую маленькие шаги, сначала с простой библиотекой:

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.a терминалом, он показывает другой ABI:

enter image description here

Как я могу собрать эту внешнюю библиотеку для Android, используя параметры прав?

1 Ответ

0 голосов
/ 05 сентября 2018

Используйте cmake toolchain из ndk, а не 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"
...