首页 > 解决方案 > 使用 JNI 时如何修复“不是有效的 win32 应用程序”

问题描述

我正在尝试使用在 Java 中使用 Qt 组件(与 gui 无关)编写的 C++ 代码。但是,当我将它导出到 dll 并从 java 调用它时,我得到“不是有效的 win32 应用程序”错误。

我在 QtCreator 上编译 C++ 端,因为它具有 Qt 依赖项。

然后我将生成的 dll 放在 java 的库路径之一中(现在是 System32,用于测试)

然后,我将用于创建本机代码的 java 代码放入 .jar 文件中,并将其包含在另一个项目中。

我想调用该项目中的函数。

这是我的 Qt .pro 文件的竞赛

QT += widgets network
QT -= gui
TARGET = JNIOpenSdkWrapper
TEMPLATE = lib
CONFIG += create_prl

DEFINES += JNIOPENSDKWRAPPER_LIBRARY
DEFINES += QT_DEPRECATED_WARNINGS

#... headers and source files here ...

INCLUDEPATH += "C:/Program Files/Java/jdk1.8.0_211/include"
INCLUDEPATH += "C:/Program Files/Java/jdk1.8.0_211/include/win32"

unix{
    target.path = /usr/lib
    INSTALLS += target
}

当我运行该项目时,我得到 UnsatisfiedLinkError 说“%1 不是有效的 Win32 应用程序”。

编辑:我正在使用 MinGW 64 位编译器和 java 1.8

标签: javac++qtjava-native-interface

解决方案


推荐阅读