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

JNI 不满意链接错误 for Ubuntu;

盛城
2023-03-14

我在stackoverflow上四处寻找类似的问题,但我找到的解决方案似乎都不适合我。我在一台Linux /Ubuntu机器上。我只是在练习JNI,但我发现了这个错误:

Exception in thread "main" java.lang.UnsatisfiedLinkError: nativetest.sayHello(Ljava/lang/String;)Ljava/lang/String;
at nativetest.sayHello(Native Method)
at nativetest.main(nativetest.java:8)

我提供了我的 .c、.h 和 .java文件。

.java文件:

public class nativetest
{
System.loadLibrary("nativetest");

public native String sayHello(String s);

 public static void main(String[] argv)
 {
 String retval = null;
 nativetest nt = new nativetest();
 retval = nt.sayHello("Hi");
 System.out.println("Invocation returned " + retval);
 }
}

.c文件:

#include "nativetest.h"
#include <stdio.h>
#include <jni.h>
#include <stdlib.h>

JNIEXPORT jstring JNICALL Java_nativetest_sayHello(JNIEnv *env, jobject thisobject, jstring js)
{
  return js;
}

.h 文件:

/* DO NOT EDIT THIS FILE - it is machine generated */
#include <jni.h>
/* Header for class nativetest */

#ifndef _Included_nativetest
#define _Included_nativetest
#ifdef __cplusplus
extern "C" {
#endif
/*
 * Class:     nativetest
 * Method:    sayHello
 * Signature: (Ljava/lang/String;)Ljava/lang/String;
 */
JNIEXPORT jstring JNICALL Java_nativetest_sayHello
  (JNIEnv *, jobject, jstring);

#ifdef __cplusplus
}
#endif
#endif

我使用这些命令生成. h文件,编译/生成. so文件,然后运行:

JAVACnativetest.java

javah-jni nativetest

gcc-shared-o libnativetest . so-I/usr/lib/JVM/Java-7-open JDK-amd64/include-I/usr/lib/JVM/Java-7-open JDK-amd64/include/Linux native test . c

爪哇 - 贾瓦库.path=.原生测试

我当前位于包含 libnativetest.so 文件以及所有 .c、.java 和 .h 文件的目录中。

任何帮助将不胜感激。

共有1个答案

巫培
2023-03-14

好吧,原来打电话给

System.loadLibrary("nativetest");

应该是静态的:

static{
System.loadLibrary("nativetest");
}

我在使用javac重新编译时也犯了错误。我对Linux非常陌生:)

 类似资料:
  • 问题内容: 我想创建一个简单的JNI层。我使用Visual Studio 2008创建了一个dll(带有DLL作为选项的Win 32 Console Application项目类型)。我在调用本地方法时收到此异常: 生成的头文件是: 实现文件是: Java文件是: 当我调用本地方法“ Hello”时,我得到执行。 我观察到的另一件事是,当我使用以下命令在命令行中进行编译时:“ cl -I” C:\

  • 我有一个JNI dll以及我在带有eclipse的机器上创建的jar文件。 我正在尝试将其部署到另一台机器,但无法通过异常 我有另一个打印java.library.path的程序,我已经验证了这个dll所依赖的dll以及这个dll在java.library.path. 我已经阅读了他们应该在当前目录中的帖子,但这不起作用。 我读过他们应该去jre/bin的帖子,得到了同样的结果。 任何帮助都将不胜

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

  • 我遵循这个指南: http://docs.opencv.org/doc/tutorials/introduction/android_binary_package/dev_with_OCV_on_Android.html 但我仍然得到这个错误: E/AndroidRuntime(916):java.lang.未满足链接错误:无法从加载器加载opencv_java248dalvik.system.P

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

  • 我刚从下载了Tess4Jhttp://tess4j.sourceforge.net/并将其导入到netbeans中。我遵循这个url,我正确地遵循了每一步,但当我尝试执行时,我得到了下面的错误。 错误: 我搜索并发现人们建议更新到 Visual Visual Studio 2013 的可再发行组件包,我做了,但事实证明没有帮助,我仍然遇到同样的问题。我不知道我做错了什么,下面是我的代码。 代码: