我一直在努力让一个基本的JNI项目在eclipse中工作。我刚刚在eclipse之外工作(参见这个帖子UnsatisfiedLinkError in JNI Code),一旦我将它转移到eclipse,我就得到了一个
Exception in thread "main" java.lang.UnsatisfiedLinkError: no HPAProgram in java.library.path
对于我的java文件中的第10行(加载库行)。我不知道是怎么回事。 Eclipse和命令行编译之间可能有什么不同?我正在使用OS X,我能够生成我的.dylib,所以这不是问题。这是我的代码:
生成文件:
# Define a variable for classpath
CLASS_PATH = ../bin
# Define a virtual path for .class in the bin directory
vpath %.class $(CLASS_PATH)
all: libhpaprogram.dylib
# $@ matches the target, $< matches the first dependancy
libhpaprogram.dylib:
cc -v -c -fPIC -I/System/Library/Frameworks/JavaVM.framework/Versions/A/Headers/ HPAProgram.c++ -o libhpaprogram.o
libtool -dynamic -lSystem libhpaprogram.o -o libhpaprogram.dylib
HPAProgram.h : HPAProgram.class
javah HPAProgram
clean:
rm HPAProgram.h libhpaprogram.o libhpaprogram.dylib
HPAProgram.c ++
/*
* HPAProgram.c++
*
* Created on: Feb 4, 2014
* Author: zalbhathena
*/
//#include <jni.h>
#include <stdio.h>
#include "HPAProgram.h"
JNIEXPORT void JNICALL Java_HPAProgram_sayHello (JNIEnv *env, jobject obj) {
printf("Hello World!\n");
}
HPAProgram.java:
public class HPAProgram {
public native void sayHello();
public static void main(String[] args) {
System.loadLibrary("HPAProgram");
HPAProgram s = new HPAProgram();
s.sayHello();
}
}
HPAProgram.h
/* DO NOT EDIT THIS FILE - it is machine generated */
#include <jni.h>
/* Header for class HPAProgram */
#ifndef _Included_HPAProgram
#define _Included_HPAProgram
#ifdef __cplusplus
extern "C" {
#endif
/*
* Class: HPAProgram
* Method: sayHello
* Signature: ()V
*/
JNIEXPORT void JNICALL Java_HPAProgram_sayHello
(JNIEnv *, jobject);
#ifdef __cplusplus
}
#endif
#endif
答案 0 :(得分:0)
我明白了!我在这个帖子How to debug a java system.loadlibrary error in linux?
中找到了它“据我所知,Eclipse不使用LD_LIBRARY_PATH。设置正确的本机库路径的最简单方法是转到项目属性 - &gt; Java构建路径 - &gt;库然后展开JRE系统库条目或(如果可用)使用本机库的Jar文件,选择“本机库位置”,然后单击“编辑...”并选择库所在的文件夹。实际上它确实设置了-Djava.library。路径变量,所以你必须在命令行中包含它,如果你从eclipse外部启动你的程序。“