Java(Intellij)与C++(Qt)混编

准备工作:Qt与Intellij编译器位数必须一致,同时32位或64位(Qt在安装过程中可以选择添加64/32位编译器)

1. 使用Intellij新建java程序

//testNative.class
public class testNative {
    static {
        System.loadLibrary("hello");
    }
    private native void sayHello();
    public static void main(String[] args){
        new testNative().sayHello();
    }
}

2. 使用javac生成.h文件

javac -h [testNative.class所在目录] [testNative.class所在目录/testNative.java]

备注:使用javah -jni生成.h文件的方式已过时,java10已经移除了javah的相关功能

生成的testNative.h内容如下

/* DO NOT EDIT THIS FILE - it is machine generated */
#include 
/* Header for class testNative */

#ifndef _Included_testNative
#define _Included_testNative
#ifdef __cplusplus
extern "C" {
#endif
/*
 * Class:     testNative
 * Method:    sayHello
 * Signature: ()V
 */
JNIEXPORT void JNICALL Java_testNative_sayHello
  (JNIEnv *, jobject);

#ifdef __cplusplus
}
#endif
#endif

3. 使用Qt生成dll文件

3.1 新建项目

并将testNative.h拷贝到Qt项目中

3.2 配置.pro文件

TARGET = hello
TEMPLATE = lib
CONFIG += console c++11
CONFIG -= app_bundle
CONFIG -= qt

INCLUDEPATH += "C:\Program Files (x86)\Java\jdk1.8.0_211\include"
INCLUDEPATH += "C:\Program Files (x86)\Java\jdk1.8.0_211\include\win32"

HEADERS += testNative.h
SOURCES += main.cpp

3.3 新建main.cpp

#include 
#include //在.pro中添加了该头文件以及jni_md.h的目录
#include 

JNIEXPORT void JNICALL Java_testNative_sayHello(JNIEnv *, jobject)
{
    std::cout << "C++:Hello";
}

3.4 编译出dll

4. 将dll文件拷贝至Intellij项目

4.1 指定dlll路径

VM options:-Djava.library.path=xxx

4.2 编译运行

java.lang.UnsatisfiedLinkError: C:\Users\HJ\Desktop\RemoClient\hello.dll: Can't find dependent libraries

md卡在依赖上了,整个过程非常蛋疼&耗时,日后再说!

你可能感兴趣的:(Java)