gpt4 book ai didi

java - dll文件的JNI问题

转载 作者:太空宇宙 更新时间:2023-11-04 11:46:24 26 4
gpt4 key购买 nike

我再次遇到 JNI 问题...

这次我的代码可以工作...但是...并非在所有 PC 上都是正确的。

我有:

  1. Jar 文件 -> 我的程序
  2. dll 文件 -> 使用本地方法
  3. 另一个 dll 文件 -> 具有其他功能。

在我的电脑上,所有这些文件都在一个文件夹中。

文件代码(.java):

// loading library
try {
Runtime.getRuntime().loadLibrary("E140tests");
setText("Library E140tests.dll was loaded correctly.");
} catch (UnsatisfiedLinkError ex) {
// try load with absolute path
setText("Error: E140tests.dll wasn't loaded!");
setErrorFlag(true);
}

E140tests.dll -> 第二个文件(在 MSVS 中编译)

#include "jni.h"
#include "jni_md.h"
#include "Lusbapi.h"
#include "LusbapiTypes.h"
#include "JNITEST2.h"

#ifdef __cplusplus
extern "C" {
#endif

/*
* Class: JNITEST2
* Method: ADCinit
* Signature: (LJNITEST2;)V
*/
JNIEXPORT void JNICALL Java_JNITEST2_ADCinit
(JNIEnv* env, jobject, jobject obj) {
...

lusbapi.dll -> 第三个文件,有其他功能。

#ifndef __LusbapiH__
#define __LusbapiH__

// --------------------------------------------------------------------------
// ---------------------------- COMMON PART ---------------------------------
// --------------------------------------------------------------------------
#include <windows.h>
#include "LusbapiTypes.h"

如果我将我的文件放在 system32 中,一切也都有效。

但是。在另一台 PC(xp,7)中,我的代码不起作用!没关系:如果文件 (+dll) 在一个文件夹中,或者如果 dll 文件在 system32 中 -> 代码找不到它们。

我以为,问题出在运行时库 (MSVS) 中,但我安装了它们,没有任何改变...

(在我的电脑上有 IntelijIDEA、MSVS、jdk7.xx -> 一切正常。我在另一台电脑(安装了 MSVS)上测试了 prog -> 一切正常。但在另一台电脑上 -> 找不到 dll(并且也安装了运行时库))。

我会等待帮助)

最佳答案

不幸的是,当您编译.DLL 时,它只与匹配体系结构的系统兼容。

又名:32 位 .DLL 在 32 位机器上工作,64 位机器也是如此。有一些策略可以解决这个问题(购买 visual studio 的许可证可为您提供允许这样做的工具,并将生成特定于平台的 .dll),但这意味着您必须将适当的 .DLL 与您使用的任何版本的程序捆绑在一起正在测试。这就是为什么大多数时候在网站上会询问您的机器是 32 位还是 64 位的原因。

这也是 java 很好的主要原因之一,因为它是“平台独立的”(我使用这个术语时不严格,因为其他因素会影响它,使其不真实)。

无论哪种方式,只要添加 JNI 调用,就会添加大量的依赖项,这使得分发软件变得更加困难。

关于java - dll文件的JNI问题,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/19728750/

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