gpt4 book ai didi

java - 少了一步? loadLibrary() 的参数需要填写什么

转载 作者:太空狗 更新时间:2023-10-29 15:51:17 27 4
gpt4 key购买 nike

这些是我从 Java 程序调用 native 函数所遵循的不完整步骤。

  1. 写了一个java程序,然后编译成.class文件
  2. 从命令 javah - jni 我生成了一个与 .class 文件同名的头文件。
  3. 之后,我打开了一个 Microsoft Visual C++ Express,开始了一个新项目并将我的应用程序类型设置为 dll

这是调用原生c方法的java程序。

class HelloWorld {

private native void print();

public static void main( String args[] ) {
new HelloWorld().print();
}

static {
System.loadLibrary("??"); // what should i write here ?
}

这是c程序

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

JNIEXPORT void JNICALL
Java_HelloWorld_print( JNIEnv *env , jobject obj) {
printf("Hello World!\n");
return;
}

我将项目名称保留为jni tester,c文件名称为HelloWorld.c

在语句 System.loadLibrary(??) 中,参数中的库名称应该是什么? (或者在我可以填充 loadLibrary 的参数之前我是否缺少任何步骤)

如果是这样,我缺少什么?

最佳答案

来自该函数的文档 System.loadLibrary :

Parameters:

libname - the name of the library.

您将 DLL 的名称传递给它。 (也就是说,没有 .dll 扩展名的 DLL 文件名。在类 Unix 系统上,它将是没有 lib 前缀或 的共享对象名称。 so(或 .o 对于某些平台)扩展名。)

确保您的 JVM 可以在其库路径中找到 DLL。要更改库路径,您可以像这样使用 java.library.path 系统属性:

java -Djava.library.path=directory_where_your_dll_resides ...

[这样做并从库名称中删除扩展名可以使代码的 Java 端尽可能可移植。您将能够按原样将其移动到另一个平台,只需要为该目标重建 JNI 部分。]

关于java - 少了一步? loadLibrary() 的参数需要填写什么,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/7221996/

27 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com