将本机库添加到 java 项目结果不满意 link
Adding native library to java project results with unsatisfied link
当我尝试添加 .dll 以构建 java 项目的路径时,我经常 运行 出错。
我使用以下命令使用 mingw64 创建了 .dll 文件:
gcc -o ctest.dll -shared -I"C:\Program Files\Java\jdk1.8.0_45\include"
-I"C:\Program Files\Java\jdk1.8.0_45\include\win32" ctest.c -LC -m64
创建的 .dll 文件与使用 dll 的 class 主文件位于同一目录中。
bin/com/jni
我尝试通过执行以下步骤将 .ddl 包含到 Eclipse 的 java 项目中:
- BuildPath -> 本机库位置 -> path_to_directory_with_.dll
结果为:
Exception in thread "main" java.lang.UnsatisfiedLinkError: com.jni.HelloWorld.helloFromC()V
at com.jni.HelloWorld.helloFromC(Native Method)
at com.jni.HelloWorld.main(HelloWorld.java:14)
由于以上方法无效,我尝试从命令行 运行 应用程序:
C:\Users\Z003DP9F\java-8 workspace\workspace\JNI_Test\bin>java
-Djava.library.path="C:\Users\Z003DP9F\java-8 workspace\workspace\JNI_Test\bin\com\jni"
com.jni.HelloWorld
和同样的错误,虽然在第 12 行而不是上面示例中的第 14 行。
Exception in thread "main" java.lang.UnsatisfiedLinkError: com.jni.HelloWorld.helloFromC()V
at com.jni.HelloWorld.helloFromC(Native Method)
at com.jni.HelloWorld.main(HelloWorld.java:12)
c 文件:
#include <jni.h>
#include <stdio.h>
JNIEXPORT void JNICALL Java_HelloWorld_helloFromC
(JNIEnv * env, jobject jobj)
{
printf("Hello from C!\n");
}
Java 主要 class:
package com.jni;
public class HelloWorld {
native void helloFromC(); /* (1) */
static {
System.loadLibrary("ctest"); /* (2) */
}
static public void main(String argv[]) {
HelloWorld helloWorld = new HelloWorld();
helloWorld.helloFromC(); /* (3) */
}
}
我一直在尝试设置的示例采用以下形式:
签名错误;您可以使用 javah 为您获取签名,但在您的情况下它只是
JNIEXPORT void JNICALL Java_com_jni_HelloWorld_helloFromC(JNIEnv * env, jobject thiz)
当我尝试添加 .dll 以构建 java 项目的路径时,我经常 运行 出错。 我使用以下命令使用 mingw64 创建了 .dll 文件:
gcc -o ctest.dll -shared -I"C:\Program Files\Java\jdk1.8.0_45\include"
-I"C:\Program Files\Java\jdk1.8.0_45\include\win32" ctest.c -LC -m64
创建的 .dll 文件与使用 dll 的 class 主文件位于同一目录中。
bin/com/jni
我尝试通过执行以下步骤将 .ddl 包含到 Eclipse 的 java 项目中:
- BuildPath -> 本机库位置 -> path_to_directory_with_.dll
结果为:
Exception in thread "main" java.lang.UnsatisfiedLinkError: com.jni.HelloWorld.helloFromC()V
at com.jni.HelloWorld.helloFromC(Native Method)
at com.jni.HelloWorld.main(HelloWorld.java:14)
由于以上方法无效,我尝试从命令行 运行 应用程序:
C:\Users\Z003DP9F\java-8 workspace\workspace\JNI_Test\bin>java
-Djava.library.path="C:\Users\Z003DP9F\java-8 workspace\workspace\JNI_Test\bin\com\jni"
com.jni.HelloWorld
和同样的错误,虽然在第 12 行而不是上面示例中的第 14 行。
Exception in thread "main" java.lang.UnsatisfiedLinkError: com.jni.HelloWorld.helloFromC()V
at com.jni.HelloWorld.helloFromC(Native Method)
at com.jni.HelloWorld.main(HelloWorld.java:12)
c 文件:
#include <jni.h>
#include <stdio.h>
JNIEXPORT void JNICALL Java_HelloWorld_helloFromC
(JNIEnv * env, jobject jobj)
{
printf("Hello from C!\n");
}
Java 主要 class:
package com.jni;
public class HelloWorld {
native void helloFromC(); /* (1) */
static {
System.loadLibrary("ctest"); /* (2) */
}
static public void main(String argv[]) {
HelloWorld helloWorld = new HelloWorld();
helloWorld.helloFromC(); /* (3) */
}
}
我一直在尝试设置的示例采用以下形式:
签名错误;您可以使用 javah 为您获取签名,但在您的情况下它只是
JNIEXPORT void JNICALL Java_com_jni_HelloWorld_helloFromC(JNIEnv * env, jobject thiz)