我没有找到我的问题的灵魂,并从昨天开始寻找。 我正在使用Windows 7和Eclipse与CDT和MinGW。
这是我的JAVA课程:
package pl.asg.front;
public class ASGFrontMain {
static
{
System.loadLibrary("libASG");
}
public native void sayHello();
public static void main(String[] args) {
System.out.println("Hello from JAVA!");
new ASGFrontMain().sayHello();
}
}
这是我的jni javah生成的头文件:
/* DO NOT EDIT THIS FILE - it is machine generated */
#include <jni.h>
/* Header for class pl_asg_front_ASGFrontMain */
#ifndef _Included_pl_asg_front_ASGFrontMain
#define _Included_pl_asg_front_ASGFrontMain
#ifdef __cplusplus
extern "C" {
#endif
/*
* Class: pl_asg_front_ASGFrontMain
* Method: sayHello
* Signature: ()V
*/
JNIEXPORT void JNICALL Java_pl_asg_front_ASGFrontMain_sayHello
(JNIEnv *, jobject);
#ifdef __cplusplus
}
#endif
#endif
使用eclipse外部工具thingy: 地点: C:\ Program Files(x86)\ Java \ jdk1.7.0_51 \ bin \ javah.exe 工作目录: $ {workspace_loc:/ ASG / bin中} 参数: -d $ {workspace_loc:/ ASG / asg_jni} $ {java_type_name}
这是我的.cpp实现:
/*
* pl_asg_front_ASGFrontMain.c
*
* Created on: 2 kwi 2014
* Author: karol
*/
#include "pl_asg_front_ASGFrontMain.h"
JNIEXPORT void JNICALL Java_pl_asg_front_ASGFrontMain_sayHello
(JNIEnv *env, jobject obj)
{
}
我得到了这个输出:
Exception in thread "main" java.lang.UnsatisfiedLinkError: pl.asg.front.ASGFrontMain.sayHello()V
at pl.asg.front.ASGFrontMain.sayHello(Native Method)
Hello from JAVA!
at pl.asg.front.ASGFrontMain.main(ASGFrontMain.java:13)
任何解决方案?提前谢谢。
答案 0 :(得分:0)
首先,如果您的本机库在Windows上被称为ASG.dll,它将在* nix系统上调用libASG.so,在Darwin上调用libASG.dylib。因此,应该通过名称加载库,允许JVM填充正确的前缀和扩展名。例如:System.loadLibrary("ASG")
。 请注意,OS X在Java中使用了错误的扩展名(.jnilib而不是.dylib)。 7。
现在,您仍然有一个UnsatisfiedLinkError,这是因为JVM不知道从哪里加载该库。如果使用System.loadLibrary,则必须将属性java.library.path设置为dll文件的位置。或者,您可以使用System.load()指定本机库的完整路径和文件名(包括前缀和扩展名)。