Java 在Windows上加载带有JNA的自定义库
我有一个.c文件,其中定义了使用Java 在Windows上加载带有JNA的自定义库,java,c,java-native-interface,jna,Java,C,Java Native Interface,Jna,我有一个.c文件,其中定义了使用JNIEXPORT的方法,我不知道如何在Java类中使用这些方法,并使用 我试图阅读,但我不明白是否可以链接一个特定的.c文件 有人能帮我吗?是的,可以像往常一样构建和编译一个共享库,然后用Native.loadLibrary加载它 C: #include <stdio.h> void exampleMethod(const char* value) { printf("%s\n", value); } import com.sun.jna
JNIEXPORT
的方法,我不知道如何在Java类中使用这些方法,并使用
我试图阅读,但我不明白是否可以链接一个特定的.c文件
有人能帮我吗?是的,可以像往常一样构建和编译一个共享库,然后用
Native.loadLibrary
加载它
C:
#include <stdio.h>
void exampleMethod(const char* value)
{
printf("%s\n", value);
}
import com.sun.jna.Library;
import com.sun.jna.Native;
public class TestJNA{
public interface CLibrary extends Library {
public void exampleMethod(String val);
}
public static void main(String[] args) {
CLibrary mylib = (CLibrary)Native.loadLibrary("test", CLibrary.class);
mylib.exampleMethod("ImAString");
}
}
Java:
#include <stdio.h>
void exampleMethod(const char* value)
{
printf("%s\n", value);
}
import com.sun.jna.Library;
import com.sun.jna.Native;
public class TestJNA{
public interface CLibrary extends Library {
public void exampleMethod(String val);
}
public static void main(String[] args) {
CLibrary mylib = (CLibrary)Native.loadLibrary("test", CLibrary.class);
mylib.exampleMethod("ImAString");
}
}
由于在查找库时遇到问题,因此通常可以通过配置java.library.path
添加一个新位置来修复此问题,该位置将搜索.so/.dll:
java -Djava.library.path=c:\dlllocation TestJNA
或者,您可以在加载库之前直接从代码中进行设置(与JNI一起使用,也应该与JNA一起使用,但我没有尝试):
在回答jna的“uraimo”之后,它应该使用jna.library.path而不是java.library.path,这应该可以解决位置问题。@user43250937 WindowsOk,代码如下所示,只需按照您习惯的方式构建dll。我使用此示例构建了一个.dll文件。但是当我运行代码
时,无法加载库“test.dll”
。该文件位于.c和.java文件的同一目录中。Wat是创建的.dll文件的正确位置?您是从控制台/终端启动还是使用eclipse?@user43250937我使用的是NetBeans,我使用的是main
方法运行该类。如果您使用的是eclipse,dll应该放在项目根目录中,您可以从控制台将其放在c:\windows\system32
(丑陋)或者设置库路径:java-Djava.library.path=c:\dllocation TestJNA
Ok,更新答案以使其适用于每个ide。