Warning: file_get_contents(/data/phpspider/zhask/data//catemap/7/google-maps/4.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Android 未找到本地\u LDLIBS中的链接_Android_Android Ndk - Fatal编程技术网

Android 未找到本地\u LDLIBS中的链接

Android 未找到本地\u LDLIBS中的链接,android,android-ndk,Android,Android Ndk,我将libsonivox.so复制到/platforms/android-14/arch arm/usr/lib/,我的android.mk文件是: LOCAL_PATH := $(call my-dir) include $(CLEAR_VARS) LOCAL_MODULE := midi LOCAL_SRC_FILES := midi.c LOCAL_LDLIBS += -lsonivox include $(BUILD_SHARED_LIBRARY) 但当我运行ndk bui

我将libsonivox.so复制到/platforms/android-14/arch arm/usr/lib/,我的android.mk文件是:

LOCAL_PATH := $(call my-dir)
include $(CLEAR_VARS)
LOCAL_MODULE    := midi
LOCAL_SRC_FILES := midi.c
LOCAL_LDLIBS    += -lsonivox
include $(BUILD_SHARED_LIBRARY)
但当我运行ndk build时,我得到了以下错误:

/home/sebastian/ndk/toolchains/arm-linux-androideabi-4.6/prebuilt/linux-x86_64/bin/../lib/gcc/arm-linux-androideabi/4.6/../../../../arm-linux-androideabi/bin/ld: error: cannot find -lsonivox
知道我做错了什么吗?谢谢


PS:这可能看起来像一篇dup文章,但我阅读了与此主题相关的所有其他文章,没有一篇有帮助

请用完整路径替换本地\u ldlibs

LOCAL_LDLIBS     := $(LOCAL_PATH)/jniLibs/lsonivox.so \\path to the lsonivox

是的,您的路径似乎有问题。但是,使用任何预构建的第三方库的首选方法是使用
include$(预构建的共享库)
方法

因此,我认为这可能主要是以下内容的重复:


这种方法的另一个非常好的好处是,如果预构建库有任何关联的头,您可以对其进行设置,以便NDK构建系统将为您传播包含路径。非常好。

这是您从中提取平台库的目录吗?你确定吗?绝对路径“/platforms”似乎与ndk安装本身的路径“/home/sebastian/ndk”不匹配。使用-L标志指定可以找到它的目录怎么样。为什么不把它放在你的项目目录中,而不是用自定义文件污染ndk安装呢?据我所知(这并不多,我只是在学习ndk),libsonivox.so已经存在于systems目录中的所有设备中,所以Android.mk正在尝试创建指向该文件的链接。我在网上找到了一个类似于ndk的例子。我错过了路径的一部分,/platform在ndk目录中libsonivox被认为是公共API还是私有API?如果是私有的(在设备上,但没有匹配的。ndk发行版中的一个文件建议),那么请记住,强烈建议您不要尝试使用它,因为它的详细信息可能会在不通知的情况下随设备或版本的不同而变化。我必须查明。不管怎样,你能理解为什么我的代码找不到它吗?在详细模式下运行ndk build as
ndk build V=1
,查看它实际从哪个库目录中提取,或者将整个输出编辑到你的文章中。这可能行得通,但我的目标是创建一个到系统库的链接,而不是自己包含库。因此,本地_LDLIBS带有-l选项,但这不是ndk的系统库,所以它确实应该在您的项目文件夹中。否则,如果您升级/重新安装工具链,它将崩溃。这是一个很好的答案。通过在
平台
之外查找
本地\u ldlib
,您仍然不意味着该库将添加到APK或链接到二进制文件中。请准备好NDK将发出警告,指出非NDK库以这种方式链接。我认为这里的区别在于它已经在设备上,但由于它不是公共API,所以它不包含在NDK中。因此,项目需要一个副本来链接,而不是部署。当然,这是有风险的,因为无法适应库细节的变化。打包另一个副本可能会起作用(如果它是显式加载的,而不是系统版本,假设zygote还没有加载),但可能只是将问题转移到库与其依赖项之间的接口上。