交叉编译为aosp

时间:2018-05-09 20:18:13

标签: android cross-compiling android-source

是否有经过验证的方法来交叉编译android aosp的本机代码?我能够在aosp上成功编译jni共享库并链接预构建的。不幸的是,共享库内容将本机方法显示为undefined:

/library/libtest_jni.so:     file format elf32-little
DYNAMIC SYMBOL TABLE:
00000000      D  *UND*  00000000 _ZN8namespaceA17namespaceB17Test6createEv

步骤:

  1. 使用android ndk工具链为32和64臂编译了prebuilts。

  2. 创建了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)
    

1 个答案:

答案 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