Eclipse Jni在终端作品中编译时不满意

Eclipse JNI UnsatisfiedLinkError when compiling in terminal works

本文关键字:编译 不满意 Jni 终端 Eclipse      更新时间:2023-10-16

我整天都在尝试获得一个基本的JNI项目来在Eclipse工作。我刚刚让它在Eclipse之外工作(请参阅JNI代码中的undylinkerror),一旦我将其转移到Eclipse,我就得到了一个

Exception in thread "main" java.lang.UnsatisfiedLinkError: no HPAProgram in java.library.path

对于我的Java文件(加载库行)中的第10行。我不知道发生了什么事。日食和命令行上的编译之间有什么不同?我正在使用OS X,并且能够生成.dylib,所以这不是问题。这是我的代码:

makefile:

# 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

hpapragram.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");
}

hpapragram.java:

public class HPAProgram {
    public native void sayHello();
    public static void main(String[] args) {
        System.loadLibrary("HPAProgram");
        HPAProgram s = new HPAProgram();
        s.sayHello();
    }
}

hpapragram.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

我弄清楚了!我在此线程中找到了它如何调试Java System.linux中的LoadLibrary错误?

"据我所知,日食不使用ld_library_path。设置正确的本机库路径的最简单方法是转到项目属性 -> java构建路径 ->库,然后展开JRE System库条目或(如果有)使用您的本机库的JAR文件,选择"本地库位置",然后单击"编辑...",然后选择您的库中的文件夹。因此,如果您从外eclipse启动程序,则必须将其包括在命令行中。"