簡體   English   中英

在Windows上使用JNA加載自定義庫

[英]Loading a custom library with JNA on Windows

我有一個.c文件,其中使用JNIEXPORT定義了方法,我不知道如何在Java類中使用這些方法通過JNA導入它們

我嘗試閱讀本指南,但我不知道是否可以鏈接特定的.c文件。

有人能幫我嗎?

是的,可以像通常那樣構建和編譯共享庫,並使用Native.loadLibrary加載它。

C:

#include <stdio.h>

void exampleMethod(const char* value)
{
    printf("%s\n", value);
}

以通常的方式進行編譯(此處在Linux上顯示gcc):

gcc -c -Wall -Werror -fPIC test.c
gcc -shared -o libtest.so test.o

Java的:

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一起使用,但我沒有嘗試過):

String libspath = System.getProperty("java.library.path");
libspath = libspath + ";c:/dlllocation";
System.setProperty("java.library.path",libspath);

//Load your library here

按照jna的“ uraimo”答案,應該使用jna.library.path而不是java.library.path來解決位置問題。

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM