我试图按照以下教程构建我的第一个JNI应用程序:https://www3.ntu.edu.sg/home/ehchua/programming/java/javanativeInterface.html
问题摘要:在运行我的应用程序时,我得到一个java.lang.UnsatisfiedLinkError错误。
首先,我编写了类hellojni.java:
public class HelloJNI {
static {
System.loadLibrary("hello"); // Load native library at runtime
// hello.dll (Windows) or libhello.so (Unixes)
}
// Declare a native method sayHello() that receives nothing and returns void
private native void sayHello();
// Test Driver
public static void main(String[] args) {
new HelloJNI().sayHello(); // invoke the native method
}
}
这个类我用:javac HelloJNI.java编译。接下来我运行javah HelloJNI,生成以下文件HelloJNI.h:
/* DO NOT EDIT THIS FILE - it is machine generated */
#include <jni.h>
/* Header for class HelloJNI */
#ifndef _Included_HelloJNI
#define _Included_HelloJNI
#ifdef __cplusplus
extern "C" {
#endif
/*
* Class: HelloJNI
* Method: sayHello
* Signature: ()V
*/
JNIEXPORT void JNICALL Java_HelloJNI_sayHello
(JNIEnv *, jobject);
#ifdef __cplusplus
}
#endif
#endif
#include <jni.h>
#include <stdio.h>
#include "HelloJNI.h"
// Implementation of native method sayHello() of HelloJNI class
JNIEXPORT void JNICALL Java_HelloJNI_sayHello(JNIEnv *env, jobject thisObj) {
printf("Hello World!\n");
return;
}
线程“main”java.lang.UnsatifiedLinkError:在java.lang.classloader.loadLibrary(classloader.java:1864),java.lang.runtime.loadLibrary0(runtime.java:870),java.lang.system.loadLibrary(system.java:1122),hellojni.(hellojni.java:3),java.lang.system.loadLibrary,java.library.path中没有hello
这似乎是互联网上最常见的JNI错误...我的方法名称似乎是正确的。我也跑了:
这给出了:000000000000006b0 T Java_HelloJNI_sayHello这似乎是正确的,即编译器没有添加额外的字符。我只是用尽了我可以尝试的东西的想法。有什么建议吗?
我的操作系统:Linux Mint 13,GCC version 4.7.3,java version 1.8.0_60
=========Update===================当我用system.load(“/usr0/home/jkinable/workspace/javaidea/jnitest/hello.so”)替换
system.loadLibrary(“hello”);
我的HelloWorld示例工作!但是,我不想使用绝对路径,所以我仍然在寻找使用System.LoadLibrary(“hello”)的方法;而是
?有什么建议吗?我也尝试在不同的linux系统上运行,但也遇到了同样的问题。
原来这个问题是由于UNIX/Linux平台上的一些命名约定造成的!当使用:System.LoadLibrary(“Hello”)时;该文件不应命名为Hello.So!相反,名称应该是libhello.so。在Windows上,使用hello.dll。我很惊讶IBM的JNI教程http://www.ibm.com/developerworks/java/tutorials/j-jni/j-jni.html中没有提到这个问题
我不确定这个问题背后的合理性是什么。为什么要在文件系统中加载一个应该命名为libhello.so的库“hello”(而不是hello.so)?
我在使用Axis2-1.6.2制作客户机时遇到了问题,然后我总结了这个问题。 当我尝试将此客户端与下一段代码一起使用时: 我收到下一个错误: 线程“main”org.apache.axis2.AxisFault中的异常:请求中没有指定方法。在org.apache.axis2.util.utils.GetInboundFaultFromMessageContext(utils.java:531)在o
问题内容: 我正在尝试使用杰克逊对POJO进行序列化和反序列化。从POJO到JSON可以完美地工作,而从另一个方向去则不行。 我有一个POJO 并运行和测试我运行了calendar.model包; 引发异常 我已经尽力将JSON转换为POJO了,但是没有。如果我从JSON映射到Map类型,它确实可以工作。 谢谢您的帮助 编辑 这是我依赖中的杰克逊的grep 看起来除了jackson2之外,没有其他
本文向大家介绍navicatdesignquery.sql.bak系统找不到指定路径错误的解决方法,包括了navicatdesignquery.sql.bak系统找不到指定路径错误的解决方法的使用技巧和注意事项,需要的朋友参考一下 今天使用Navicat ,其他功能都正常,但是新建查询的时候,出现一个很奇葩的问题 C:\Program Files (x86)\PremiumSoft\Navicat
问题内容: 我想将文件从Ubuntu主机复制到Docker容器。 我使用14.04 LTS存储库中的Docker 1.6.2。 当我尝试复制时出现错误: 同样成功,我可以输入乱码而不是文件名和路径: 问题答案: 版本1.6.2不允许从主机复制到容器,您需要至少升级到1.8以获得该支持。
大家好,我有一个问题,当我试图复制一个文件从主机到docker容器,我得到了这个错误。 这是我的命令docker cp /usr/zhy/init.sqldb001:/root 这似乎不起作用。这是我的docker参数。 客户端版本:1.6.2客户端API版本:1.18 Go版本(客户端):go1.3.3 Git提交(客户端):7c8fca2 OS/Arch(客户端):linux/amd64服务器
当我运行我的应用程序时,项目的常规选项卡的签名部分出现了两个错误。一个说,“操作无法完成。无法使用帐户登录 ________" 而另一个说“找不到 ________ 的配置文件”。它提到Xcode找不到配置文件。这是什么意思,我该如何修复?