//HelloWorld.java
public class HelloWorld { public native void displayHelloWorld();

static {
System.out.println("run main");
System.setProperty("java.library.path", ".");
System.out.println("java.library.path="+System.getProperty("java.library.path"));
System.loadLibrary("hello");
}

public static void main(String[] args) {
new HelloWorld().displayHelloWorld();
}
}//HelloWorld.h[javah -jni HelloWorld生成应该也没问题]
/* DO NOT EDIT THIS FILE - it is machine generated */
#include <jni.h>
/* Header for class HelloWorld */#ifndef _Included_HelloWorld
#define _Included_HelloWorld
#ifdef __cplusplus
extern "C" {
#endif
/*
 * Class:     HelloWorld
 * Method:    displayHelloWorld
 * Signature: ()V
 */
JNIEXPORT void JNICALL Java_HelloWorld_displayHelloWorld
  (JNIEnv *, jobject);#ifdef __cplusplus
}
#endif
#endif//Hello.c
#include "jni.h"
#include "HelloWorld.h"JNIEXPORT void JNICALL Java_HelloWorld_displayHelloWorld(JNIEnv *, jobject){
printf("HelloWorld !\n");
return;
}//生成libhello.so(生成在当前目录,jni.h,jni_md.h为了学习方便我放在一个目录下)
gcc -I. -shared hello.c -o libhello.so//设置环境变量: LD_LIBRARY_PATH
set LD_LIBRARY_PATH=.//运行 HelloWorld但就说我没导入库,可是我的.so文件和其他的文件都放在一个目录下,但是咳是不行,问大家帮助下,谢谢拉!

解决方案 »

  1.   

    .so生成了,只要设定LD_LIBRARY_PATH就可以了,最简方法执行以下命令:   
     export   LD_LIBRARY_PATH=`pwd`:$LD_LIBRARY_PATH   
    表示把pwd的执行结果返回给LD_LIBRARY_PATH,并加在原LD_LIBRARY_PATH前面   
      pwd   是linux得到当前路径的命令(相当于dos下的cd)   
     a.JAVA   JNI在linux下运行时会在LD_LIBRARY_PATH中搜索.so文件   
     b.如果你只要在当前目录下执行,只要简单地:LD_LIBRARY_PATH:=.   
     c.别忘了前面的export,因为linux的环境变量只对当前进程有效   
     d.我编的*.so文件放在什么地方都行,只要在LD_LIBRARY_PATH中加入.so的目录   
      

  2.   

    我是在windows 中运行的,也设置了LD_LIBRARY_PATH, .so也生成了,设么都配置好了,但是就报没找到lib库...很郁闷饿
    我登SecureCRT上去试下