在终端编译时Eclipse JNI UnsatisfiedLinkError

时间:2014-02-05 06:29:51

标签: java c++ eclipse gcc java-native-interface

我一直在努力让一个基本的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

1 个答案:

答案 0 :(得分:0)

我明白了!我在这个帖子How to debug a java system.loadlibrary error in linux?

中找到了它

“据我所知,Eclipse不使用LD_LIBRARY_PATH。设置正确的本机库路径的最简单方法是转到项目属性 - &gt; Java构建路径 - &gt;库然后展开JRE系统库条目或(如果可用)使用本机库的Jar文件,选择“本机库位置”,然后单击“编辑...”并选择库所在的文件夹。实际上它确实设置了-Djava.library。路径变量,所以你必须在命令行中包含它,如果你从eclipse外部启动你的程序。“