gpt4 book ai didi

Android NDK 并加入新的共享库

转载 作者:太空宇宙 更新时间:2023-11-04 04:59:52 24 4
gpt4 key购买 nike

我有一个问题,为什么我不能在不通过 NDK-build 重新编译的情况下简单地在 Android 中放入新的共享库。这是我所做的:

使用 Android Studio 和最近发布的 Android NDK,我已经能够编译一个使用 C 代码的应用程序,它引用了一个共享库。我编译共享库:

GCC := /xxx/AndroidStudioProjects/android-ndk-r10d/toolchains/x86-4.6/prebuilt/windows/bin/i686-linux-android-gcc.exe
GPP :=/xxx/AndroidStudioProjects/android-ndk-r10d/toolchains/x86-4.6/prebuilt/windows/bin/i686-linux-android-g++.exe
AR := /xxx/AndroidStudioProjects/android-ndk-r10d/toolchains/x86-4.6/prebuilt/windows/bin/i686-linux-android-ar.exe

OPTIONS :=\
-ffunction-sections \
-funwind-tables \
-DANDROID

default: all
all: obj
$(AR) r libmathadd.so mathadd.o

obj:
$(GCC) $(OPTIONS) -c mathadd.c

这给了我我的 .so 文件。我现在使用 Android.mk 生成文件运行我的 ndk-build:

LOCAL_PATH := $(call my-dir)

include $(CLEAR_VARS)
LOCAL_MODULE := mathadd
LOCAL_SRC_FILES :=./libmathadd.so
include $(PREBUILT_SHARED_LIBRARY)

include $(CLEAR_VARS)
LOCAL_LDLIBS := -llog
LOCAL_MODULE := ndk1
LOCAL_SRC_FILES := native.c
LOCAL_SHARED_LIBRARIES := mathadd
include $(BUILD_SHARED_LIBRARY)

在此之后,我有我的 ndk1 .so 文件和我的 mathadd .so 然后我将它们放在一个文件夹目录中:

app -> src -> jniLibs -> x86 -> libmathadd.so

应用程序 -> 源代码 -> jniLibs -> x86 -> libndk1.so

我在我的模拟器上编译并运行,一切正常!

现在这是我的问题。我稍微修改了我的共享库源代码 (mathadd.c)。我使用第一个 make 文件重新编译它并将其直接放入应用程序树中(无需重建 native c 代码)。我在 Studio 中重建应用程序,并在我的模拟器上运行,发现我的修改没有发生。

我不会更改我的本地源,也不会更改本地和我的共享库之间的 api。

如果我使用 ndk-build 脚本重建 native ,并将新的 native ndk1 拖入,一切都会再次运行,包括新的修改。似乎我每次调整共享库时都需要通过 ndk 重建源...??

有什么想法吗?

更新:我用 RE 工具打开了我的 libndk .so 库。结果是 ndk 编译器将 libmathadd 代码静态添加到 libndk 中,尽管它被列为本地共享库。我很好奇这是否是因为优化默认设置为最快速度,而 libmathadd 代码是简单的数学。

最佳答案

所以 libndk1.so 依赖于 libmath.so ?当您接触到 libmath 源代码时,重建它是合乎逻辑的。

关于Android NDK 并加入新的共享库,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/28307818/

24 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com