当前位置: 首页 > 知识库问答 >
问题:

在单元测试环境中“java.lang.未满足链接错误:*. so:找不到依赖库”

西门安宁
2023-03-14

我正在尝试弄清楚如何将我的本机库集成到android代码中。我创建了一个简单的C函数,它在设备上运行代码时运行良好。但是我目前的目标是让它在单元测试环境(jUnit)中工作,我面临着问题:

因此,在单元测试env系统中。loadLibrary(“lib”)不工作,我将其保存到系统中。load(“/full/path/to/lib.so”),但现在此行引发异常:

java.lang.不满意的链接错误:app\build\中介\cmake\debug\obj\x86_64\liblib.so:找不到依赖库java.lang.ClassLoader$NativeLibrary.load(本机方法)java.lang.ClassLoader.loadLibrary0(ClassLoader.java:1941)java.lang.ClassLoader.load库(ClassLoader.java:1824)java.lang.Runtime.load0(Runtime.java:809)java.lang.System.load(System.java:1086)

路径正确,并且存在此路径下的文件。

我尝试使用基于x86的lib版本的路径,但它仍然引发相同的异常。

我正在使用最新的Android NDK、Clang工具链,在基于64位的Windows 7笔记本电脑上运行单元测试,CPU是核心i7,运行时的java版本似乎也是64位的。

那么,这种情况下会出现什么问题?如何解决?

我有一种感觉,即使考虑到clang编译x86/x86_64*. so文件的事实,它们在基于windows的env中仍然无效,但我没有安装linux来快速检查这个想法。

共有1个答案

臧弘和
2023-03-14

很明显,但此消息告诉您*. so库依赖于一些未在目标平台上呈现的其他库(在您的情况下在android上)。
可能,您的库使用了Windows API中的一些东西。我建议使用Dependency Walker等工具检测不良依赖项

 类似资料:
  • 我试图编写一个简单的Java程序,通过JNI调用C函数来打印“Hello World”。一切编译都没有错误,但当我运行程序时,我得到一个“UnsatisfiedLinkError:找不到依赖库”。 根据Dependency Walker和dumpbin的说法,唯一的依赖项是“kernel32.dll”,在C:\Windows\System32及其依赖项中,也在System32中。 使命感 返回时没

  • 我试图从java调用一个使用C样式字符串的C函数。当我使用C风格的字符串时,程序执行得很好,但正如我声明std::string时,不知何故,它再也找不到依赖库了。我在eclipse环境中检查了includes文件夹,它确实包含 这是我的本地文件: 这段代码可以很好地从java编译并运行良好,但只要我尝试使用std::string版本(注释),代码就会编译并创建动态库,但在运行java代码时,我会遇

  • 我正在Eclipse上从事一个Java项目,该项目通过JNI使用C OpenCV库。一些图像处理算法是在本机端用OpenCV实现的,我希望使用JNI从java使用它们。 我构建了一个C DLL项目来链接到Java,这导致了一个文件。我使用GCC 6.3编译器编译了OpenCV,并在Eclipse CDT上使用相同的GCC 6.3编译器编译了C代码(以及MinGW链接器)。我还使用Dependenc

  • 我正在从事一个使用JNI的Java项目。JNI调用我自己编写的自定义库,比如mylib。这取决于第三方库libsndfile-1。dll。 当我运行我的程序时,它会崩溃 我搜索了这个网站(和其他网站),并尝试了一些修复: > 我修复了mylib中的方法名称。dll,如此处所建议。方法名称不知怎么被编译器弄乱了,但我添加了链接器标志,dll方法名称现在与jni头文件中的名称完全匹配。 我将所有这些D

  • 为什么我会得到不满意的链接错误? 细节如下: 本机方法的原型及其在我的Java代码中的调用是这样的: 私有本机long sampleFunction(long[][]twoDimArray,long number); p.SampleFunction(twoDimArray,number); 本机方法在VC++代码中的原型是这样的: JNIEXPORT jlong JNICALL Java_MyC

  • 我正在开发一个Spring Boot应用程序,其中我声明了一个组件,如下所示: 我想让它成为一个单例bean(因为默认情况下组件是单例的,所以我没有添加显式声明)。 我在类中添加了一个私有构造函数。 我有一个定义bean的配置类。 我还有应用程序和控制器类。 我的单元测试用例如下所示: 在上面的代码中,如果我运行单元测试,我将得到以下异常。 通过字段“repositoryMaster”表示的未满足