【问题标题】:Android native project referencing shared library from c++ library projectAndroid 本机项目从 C++ 库项目中引用共享库
【发布时间】:2012-02-28 01:42:47
【问题描述】:
我有 2 个项目:
1 - Android 原生项目
2 - C/C++ 项目
我正在 C/C++ 项目中构建我的共享库文件 (.so),并希望在 Android Native 项目中使用这些 .so 文件。
我不想将这些库文件从一个项目复制并粘贴到另一个项目。
首先,是否可以通过对 C++ 库项目的一些参考等来使用我本机 Android 项目中的那些 .so 文件?
是否更容易找到一种方法来自动将 .so 文件从 C++ 库项目复制到 Android 原生项目?
【问题讨论】:
标签:
android
android-ndk
shared-libraries
【解决方案1】:
你需要先为 ARM 重新编译你的库。您可以为此使用 ndk 的“独立工具链”功能。在 ndk 目录(docs/STANDALONE-TOOLCHAIN.html)中有一个文档解释了更多关于它的信息。我需要在项目中使用 libexpat,所以我创建了一个 bash 文件来使用独立工具链编译 expat,如下所示:
NDK_PATH=/android-ndk-r7
NDK_GCC=${NDK_PATH}/toolchains/arm-linux-androideabi-4.4.3/prebuilt/linux-x86/bin/arm-linux-androideabi-gcc
export CC="${NDK_GCC} --sysroot=${NDK_PATH}/platforms/android-8/arch-arm"
export CFLAGS='-mthumb'
export LDFLAGS='-Wl,--fix-cortex-a8'
./configure --host=arm-eabi
make
然后你可以将so复制到任何你想要的地方并从Android.mk中引用它:
LOCAL_LDLIBS := \
-Lvendor/expat/sdk/lib/android \
-lexpat
请注意,我构建了 expat 并静态链接它,所以我不必担心复制结果所以