嗯,我的情况如下:
我正在使用一个特殊的Android设备,它有一些附加功能。我的应用程序在android ndk中工作,现在我想调用制造商提供的一些功能。
这个函数有两个不同的.so文件,从现在开始mylib1和mylib2。此外,我从制造商处获得了标题,以便能够在ndk中完全实现它。
问题在于它们都不起作用。我试图将它们链接到我的native-lib(主库),但是我以相同的链接方式得到两种错误(我觉得这部分很奇怪)
对于mylib1,我在尝试编译代码时遇到以下错误:
[armeabi] SharedLibrary:libnative-lib.so
C:/Users/JuanJo/Documents/JorgeVerdeguerGomez/Workspace/PCPA/app/src/main/jni/native-lib.cpp:17:错误:未定义引用' Lib_Beep()' clang ++。exe:错误:链接器命令失败,退出代码为1(使用-v查看调用)
在我的第一种方法中,我认为我只是将其链接错误,尽管在此页面中找到了多个答案,甚至是谷歌指南本身的代码,但是,我尝试在mylib2中使用一些函数。
奇怪的是这个库确实编译了,并且确实为其头文件中的方法提供了定义(不是针对其他头文件,已经尝试过了)但是当我尝试运行应用程序时,它只是停止应用程序时试图执行: 的System.loadLibrary("天然-LIB&#34);
如果我评论该行,则应用程序不会停止(它不会执行任何操作,因为所有内容都在该库中,但至少它显示了启动屏幕)
我似乎也无法找到告诉我它停止的原因的任何日志或文件。
解释之后,我会告诉你我的android.mk,希望你能帮助我:
LOCAL_PATH :=$(call my-dir)
include $(CLEAR_VARS)
LOCAL_MODULE := mylib1
LOCAL_SRC_FILES := libAndroid.so
include $(PREBUILT_SHARED_LIBRARY)
include $(CLEAR_VARS)
LOCAL_MODULE := mylib2
LOCAL_SRC_FILES := libAndroidEmvKernel.so
include $(PREBUILT_SHARED_LIBRARY)
include $(CLEAR_VARS)
LOCAL_MODULE := libnative-lib
LOCAL_SHARED_LIBRARIES= \
mylib1 \
mylib2
LOCAL_SRC_FILES := \
native-lib.cpp \
restOfCppFiles.cpp
LOCAL_LDLIBS := -llog \
-landroid
include $(BUILD_SHARED_LIBRARY)
老实说,我认为.so可能无法正确编译或类似的东西,因为我觉得对于相同的链接程序和相同类型的文件有两种不同的反应很奇怪。
如果您认为有需要,请随时询问更多信息。