是否有经过验证的方法来交叉编译android aosp的本机代码?我能够在aosp上成功编译jni共享库并链接预构建的。不幸的是,共享库内容将本机方法显示为undefined:
/library/libtest_jni.so: file format elf32-little
DYNAMIC SYMBOL TABLE:
00000000 D *UND* 00000000 _ZN8namespaceA17namespaceB17Test6createEv
步骤:
使用android ndk工具链为32和64臂编译了prebuilts。
创建了Android.mk:
LOCAL_PATH := $(call my-dir)
include $(CLEAR_VARS)
LOCAL_MODULE := libtest_jni
LOCAL_SRC_FILES := Test.cpp
LOCAL_LDLIBS_64 := $(LOCAL_PATH)/libtest64.so
LOCAL_LDLIBS_32 := $(LOCAL_PATH)/../libtest32.so
include $(BUILD_SHARED_LIBRARY)
答案 0 :(得分:0)
也许使用NDK工具链编译的某些东西可以在AOSP下工作,但是由于安全原因,NDK和AOSP具有不兼容的不同STL库。例如,当我尝试使用NDK编译的Boost库(如AOSP下的预构建库)时,由于STL名称空间不匹配(std :: __ 1 vs std :: __ ndk1)而出现链接器错误。
对于交叉编译,需要通过创建两个构建脚本来支持两个构建系统:NDK的CMakeLists.txt和AOSP的Android.bp。
以下是交叉编译库的示例:https://github.com/nkh-lab/logger