我正在尝试将本机 C++ 代码添加到应用程序中,但在执行时出现链接器错误。我猜测我的 Android.mk 文件中存在问题,或者我应该手动移动共享库?我正在分支 android11-release 上使用 AOSP 进行构建。
我将以下内容添加到现有
include $(BUILD_PACKAGE)
周围的厨房水槽应用程序的主 Android.mk 文件中:
LOCAL_JNI_SHARED_LIBRARIES := libjni_mylib
include $(BUILD_PACKAGE)
include $(call all-makefiles-under, $(LOCAL_PATH))
我添加了一个名为 jni 的目录,其中包含我的 C++ 源代码以及以下 Android.mk:
LOCAL_PATH:= $(call my-dir)
# MyLib
include $(CLEAR_VARS)
LOCAL_CPP_EXTENSION := .cpp
LOCAL_SDK_VERSION := 17
LOCAL_MODULE := libjni_mylib
LOCAL_SRC_FILES := MyJniClient.cpp MyCode.cpp
LOCAL_PRODUCT_MODULE := true
LOCAL_CFLAGS += -ffast-math -O3 -funroll-loops
LOCAL_CFLAGS += -Wall -Wextra -Werror
LOCAL_ARM_MODE := arm
include $(BUILD_SHARED_LIBRARY)
当我运行应用程序并执行 JNI 函数时,它崩溃并出现以下错误:
E AndroidRuntime: java.lang.UnsatisfiedLinkError: dlopen failed: library "libjni_mylib.so" not found
但是,我在目标(模拟器)上看到 /system/priv-app/MyKitchenSinkApp 包含 MyKitchenSinkApp.apk 和 lib/x86_64/libjni_mylib.so。为什么链接器无法找到共享目标文件?我还需要分享更多信息来提供帮助吗?
编辑:我发现 libjni_mylib.so 实际上只是 /system/lib64/libjni_mylib.so 的符号链接,而该链接并不存在。现在我不知道如何解决这个问题。似乎当我这样做时
make
即使到达了 makefile,它实际上也没有构建 .so 文件。
原来我在 makefile 中的文件名有一个拼写错误。