【发布时间】: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