安卓cmake 不同的阿比
Android cmake different abi
我使用预构建的安卓原生库:libcrypto.a
.库是为armeabi, armeabi-v7a and x86
编译的。结构:
-app
- CMakeLists.txt
- libs
- armeabi
- armeabi-v7a
- x86
每个文件夹 ( armeabi, armeabi-v7a and x86
( 包含文件夹lib
(包含 libcrypto.a
(和include
(包含头文件(。CMake 代码:
add_library( # Sets the name of the library.
native-lib
# Sets the library as a shared library.
SHARED
# Provides a relative path to your source file(s).
src/main/cpp/native-lib.cpp )
add_library(crypto STATIC IMPORTED)
set_target_properties(crypto
PROPERTIES IMPORTED_LOCATION ${CMAKE_SOURCE_DIR}/libs/${ANDROID_ABI}/lib/libcrypto.a)
target_link_libraries( # Specifies the target library.
native-lib
crypto
# Links the target library to the log library
# included in the NDK.
${log-lib})
在我自己的native-lib
我想使用libcrypto.a
.但是当我想导入头文件f.e时。 #include "openssl/md5.h"
Android Studio 看不到该文件。并让我包含来自不同 abis 的三个文件之一:
"../../../libs/x86/include/openssl/md5.h"
"../../../libs/armeabi/include/openssl/md5.h"
"../../../libs/armeabi-v7a/include/openssl/md5.h"
有没有办法创建我的库的一个版本(native-lib
(,只包含 1 个标题并让 android 工作室自动选择 abi?
喜欢:
#include "openssl/md5.h"
但同时使用 3 个 ABI 版本。或者我应该使用预构建的包含库而不是那样?
#EDIT1
target_include_directories(crypto INTERFACE ${CMAKE_SOURCE_DIR}/libs/${ANDROID_ABI}/include)
不工作,收到CMake错误。
在此之前,我用过
target_include_directories(${CMAKE_SOURCE_DIR}/libs/${ANDROID_ABI}/include/)
您需要添加一个包含目录,以便编译器可以找到openssl/md5.h
。
最惯用的方法是:
target_include_directories(crypto INTERFACE
${CMAKE_SOURCE_DIR}/libs/${ANDROID_ABI}/include)
不幸的是,CMake 很愚蠢,实际上还不允许你在导入的库目标上执行此操作,所以你必须手动设置属性,如下所示:
set_target_properties(crypto
PROPERTIES
IMPORTED_LOCATION ${CMAKE_SOURCE_DIR}/libs/${ANDROID_ABI}/lib/libcrypto.a
INTERFACE_INCLUDE_DIRECTORIES ${CMAKE_SOURCE_DIR}/libs/${ANDROID_ABI}/include
)
这将包含目录添加到加密接口中,这意味着在构建本机库时也会使用它,因为前面带有 INTERFACE 的属性会传播给该目标的用户。使用 INTERFACE 属性是 CMake 中将使用要求传播到库使用者的自然方式。
您能否尝试以下代码之一:
include_directories("${CMAKE_SOURCE_DIR}/libs/${ANDROID_ABI}/include")
或
target_include_directories(native-lib "${CMAKE_SOURCE_DIR}/libs/${ANDROID_ABI}/include")
如果我没记错的话,target_include_directories
将文件包含在特定目标中。由于您要在native-lib
文件中导入头文件,因此target_include_directories
必须将native-lib
对准。而不是crypto
.这些头文件不是crypto
...但要native-lib
.
对于任何情况,您都可以设置include_directories
,将这些头文件添加到所有目标(native-lib
和crypto
(。
另外,请记住:
1 - 编辑您的 CMake列表.txt
2 - 执行项目同步
3 - 只有在之后,打开您的native-lib.cpp
文件并尝试再次导入文件头文件。
- 在安卓设备上找不到使用 QStandardPath 创建的文件
- 使用AAR的虚幻安卓开发
- 如何在安卓工作室中将c ++头文件从一个文件夹导入到另一个文件夹?
- 操纵安卓相机的深度图导致应用程序崩溃
- 我的应用程序无法在安卓上使用OpenSSL进行链接
- 在安卓应用程序中使用.exe文件
- 如何从命令行使用 cmake 为有根的安卓设备制作可执行文件?
- 安卓UE4错误缺少"SteamShared"的预编译清单
- 安卓工作室 |CPP 文件错误错误: 位图库中对"AndroidBitmap_unlockPixels"的未定义引用
- 安卓 NDK 制造。数百"undefined reference error"
- 简单的安卓二进制崩溃与zlib
- 安卓 NDK 输入源
- 从安卓NDK15切换到17使得malloc和朋友找不到
- 我用C++,icmp制作了Ping程序.但它不适用于安卓
- 安卓inotify_add_watch失败:权限被拒绝?
- 获取位于安卓工作室中可绘制的图像的绝对路径,用于NDK项目
- 如何从安卓、高通设备获取射频/NV项目?
- 安卓链接问题
- 将帧(安卓中的垫子数据)从安卓传递到本机 c++ 并检测人脸
- 安卓cmake 不同的阿比