Warning: file_get_contents(/data/phpspider/zhask/data//catemap/1/database/10.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
JNI和c的java.lang.UnsatifiedLinkError_Java_C_Java Native Interface - Fatal编程技术网

JNI和c的java.lang.UnsatifiedLinkError

JNI和c的java.lang.UnsatifiedLinkError,java,c,java-native-interface,Java,C,Java Native Interface,我已经看到了许多JNI应用程序的示例。我自己也试过一个,但有一个例外 dileepvikram@dileepvikram-System-Product-Name:~/include$ java -Djava.Library.path=. Test Exception in thread "main" java.lang.UnsatisfiedLinkError: no Test in java.library.path at java.lang.ClassLoader.loadLibrary(C

我已经看到了许多JNI应用程序的示例。我自己也试过一个,但有一个例外

dileepvikram@dileepvikram-System-Product-Name:~/include$ java -Djava.Library.path=. Test
Exception in thread "main" java.lang.UnsatisfiedLinkError: no Test in java.library.path
at java.lang.ClassLoader.loadLibrary(ClassLoader.java:1738)
at java.lang.Runtime.loadLibrary0(Runtime.java:823)
at java.lang.System.loadLibrary(System.java:1028)
at Test.<clinit>(Test.java:9)
Could not find the main class: Test.  Program will exit.
我已经编译了代码,并用代码创建了一个Test.h

javah -jni Test
测试c

#include "Hello.h"
#include<stdio.h>
#include "jni.h"


JNIEXPORT void JNICALL Java_hello_sayHello
  (JNIEnv *env, jobject object, jint len) {
  printf ( "\nLength is %d", len ); }
void main()
{
    printf("\nHello World\n");

}
然后尝试使用命令运行java类

gcc Test.c -o libTest.so
java -Djava.library.path=. Test
我得到了一个例外

dileepvikram@dileepvikram-System-Product-Name:~/include$ java -Djava.Library.path=. Test
Exception in thread "main" java.lang.UnsatisfiedLinkError: no Test in java.library.path
at java.lang.ClassLoader.loadLibrary(ClassLoader.java:1738)
at java.lang.Runtime.loadLibrary0(Runtime.java:823)
at java.lang.System.loadLibrary(System.java:1028)
at Test.<clinit>(Test.java:9)
Could not find the main class: Test.  Program will exit.
dileepvikram@dileepvikram-系统产品名称:~/include$java-Djava.Library.path=。试验
线程“main”java.lang.UnsatisfiedLinkError中出现异常:java.library.path中没有测试
位于java.lang.ClassLoader.loadLibrary(ClassLoader.java:1738)
位于java.lang.Runtime.loadLibrary0(Runtime.java:823)
位于java.lang.System.loadLibrary(System.java:1028)
测试时。(Test.java:9)
找不到主类:Test。程序将退出。

我已经尝试了很多,为了找到问题,非常感谢您的帮助。

首先,您的课程名为
Test
,而不是
hello
。因此,您的功能应该是:

JNIEXPORT void JNICALL Java_Test_sayHello(JNIEnv *env, jobject object, jint length)
此外,在编译源代码时,使用
-shared
-fPIC
让gcc编译共享对象(而不是可执行文件):


作为共享对象编译还意味着您可以从
Test.c
中删除
main
函数,该函数本来就不应该存在。

.export LD\u LIBRARY\u PATH=,从而设置当前目录的库路径,即查找so的Java文件

JNIEXPORT void JNICALL Java_Test_sayHello(JNIEnv *env, jobject object, jint length)
gcc Test.c -shared -fPIC -o libTest.so