【问题标题】:Include C++ shared library in self-built android. Error while launch ndk-build在自建的android中包含C++共享库。启动 ndk-build 时出错
【发布时间】:2013-06-20 15:06:26
【问题描述】:

我试图在自建的 android 发行版中包含简单的 C++ 共享库。它已经用g++编译,没有任何错误和警告。

目前我需要将这个 .so 库包含到自建的 android 中。

我将我的源代码复制到 '$(Android Source)/ndk/source/android/libmd5/jni' 并创建了包含下一个内容的 Android.mk 文件:

LOCAL_PATH := $(call my-dir)
include $(CLEAR_VARS)

LOCAL_CFLAGS := 

LOCAL_MODULE     := libmd5
LOCAL_LDLIBS     := -L$(SYSROOT)/usr/lib
LOCAL_SRC_FILES  := md5.h md5.cc

include $(BUILD_SHARED_LIBRARY) 

然后我在 ~/.bashrc 的末尾添加了下一行

    export PATH=$PATH:$HOME/AndroidSources/ndk:$HOME/bin/android-sdk-linux/tools

分别有NDK和SDK-tools的路径。

当我启动 ndk-build 时,我得到了下一件事:

andrey@andrey-desktop:~/AndroidSources/ndk/sources/android/libmd5$ ndk-build
Android NDK: WARNING: Unsupported source file extensions in jni/Android.mk for module md5    
Android NDK:   md5.h md5.cc    
make: /home/andrey/AndroidSources/ndk/toolchains/arm-linux-androideabi-4.4.3/prebuilt/linux-x86/bin/arm-linux-androideabi-gcc: Command not found
make: /home/andrey/AndroidSources/ndk/toolchains/arm-linux-androideabi-4.4.3/prebuilt/linux-x86/bin/arm-linux-androideabi-gcc: Command not found
SharedLibrary  : libmd5.so
make: /home/andrey/AndroidSources/ndk/toolchains/arm-linux-androideabi-4.4.3/prebuilt/linux-x86/bin/arm-linux-androideabi-g++: Command not found
make: *** [obj/local/armeabi/libmd5.so] Error 127

当我关注 ~/AndroidSources/ndk/toolchains/arm-linux-androideabi-4.4.3/
我没有找到预建目录。那里只包括两个文件:config.mk 和 setup.mk

但是,当我从 severally downloaded ndk-r8e 启动 ndk-build 时,我得到了一个非常不同的输出:

$ ndk-build
Android NDK: WARNING: Unsupported source file extensions in jni/Android.mk for module md5    
Android NDK:   md5.h   
Compile++ thumb  : md5 <= md5.cc
StaticLibrary  : libstdc++.a
SharedLibrary  : libmd5.so
Install        : libmd5.so => libs/armeabi/libmd5.so

警告是理解 - .h 文件不得在 .mk 文件中。但是我在 libs/armeabi/ 中找到了最需要的库(如上所述)

我用 ubuntu 12.10 做了所有事情,并尝试使用来自 android source 的 ndk。

我做错了什么?如何在自建的android中获取包含的共享库?我希望我已经提供了足够详细的信息。如果没有请询问。

【问题讨论】:

  • 看来从谷歌下载 ndk 包解决了你的问题。您应该使用他们打包的版本,而不是他们源存储库中的版本。

标签: c++ android-ndk java-native-interface g++


【解决方案1】:

LOCAL_SRC_FILES 中不包含头文件,它仅适用于源文件

LOCAL_SRC_FILES := md5.h md5.cc

应该是

LOCAL_SRC_FILES := md5.cc

您在实际源文件中添加指向头文件(导入语句)的链接

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2018-04-27
    • 1970-01-01
    相关资源
    最近更新 更多