Крашится Java класс с динамической библиотекой под капотом. Библиотека основана на QCoreAppliacation. Помогите собрать, если это возможно?

$ cat src/wrapper/Client.java 
package wrapper;

import java.io.IOException;

public class Client {

native long create();
native void start(long ptr);

static {
System.load(System.getProperty("user.dir"+"/bin/libclient.so"
}

public static void main(String[] args) throws Exception{

Client client = new Client();
long ptr = client.create();
client.start(ptr);

char ch;
ch = (char) System.in.read();
}

}

Заголовочный JNI файл сгенерирован был автоматически

$ cat bin/wrapper_Client.h 
#include <jni.h>

#ifndef _Included_wrapper_Client
#define _Included_wrapper_Client
#ifdef __cplusplus
extern "C" {
#endif
JNIEXPORT jlong JNICALL Java_wrapper_Client_create
(JNIEnv *, jobject);

JNIEXPORT void JNICALL Java_wrapper_Client_start
(JNIEnv *, jobject, jlong);

#ifdef __cplusplus
}
#endif
#endif

Реализация JNI:

$ cat bin/wrapper_Client.cpp 
#include "wrapper_Client.h"
#include "qlibrary.h"


JNIEXPORT jlong JNICALL Java_wrapper_Client_create (JNIEnv *, jobject)
{
jlong jresult = 0;
Controller *controller;
runApp(controller);
*(Controller**) &jresult = controller;
return jresult;
}


JNIEXPORT void JNICALL Java_wrapper_Client_start (JNIEnv *, jobject, jlong jptr)
{
Controller *controller;
controller = *(Controller **) &jptr;
start(controller);

}

Команда сборки

g++ -std=c++11 -shared -fPIC -DQLIBRARY_LIBRARY -DQT_DEPRECATED_WARNINGS -DQT_NO_DEBUG -DQT_CORE_LIB -I. -isystem /usr/include/x86_64-linux-gnu/qt5 -isystem /usr/include/x86_64-linux-gnu/qt5/QtCore -I. -I/usr/lib/x86_64-linux-gnu/qt5/mkspecs/linux-g++ -o libclient.so  -I/usr/lib/jvm/java-11-openjdk-amd64/include/ -I/usr/lib/jvm/java-11-openjdk-amd64/include/linux/ wrapper_Client.cpp -lqlibrary -lQt5Core -lpthread

Имеется библиотека libqlibrary.so. Она установлена в системе и в С++ приложении нормально работает.

class Controller;

void runApp(Controller*&
void start(Controller*&
...

void runApp(Controller* &controller)
{
std::thread th
(
[&]
{
int argc = 0;
char *argv = nullptr;
QCoreApplication app(argc, &argv);
controller = new Controller;
app.exec();
}
);
th.detach();
}


void start(Controller*& controller)
{
controller->start();
}
...

Запустить байт код не удается:

$ java -classpath bin wrapper.Client
#
# A fatal error has been detected by the Java Runtime Environment:
#
# SIGSEGV (0xb) at pc=0x00007f4c9a4d08f4, pid=26982, tid=26984
#
# JRE version: OpenJDK Runtime Environment (11.0.7+10) (build 11.0.7+10-post-Ubuntu-2ubuntu218.04)
# Java VM: OpenJDK 64-Bit Server VM (11.0.7+10-post-Ubuntu-2ubuntu218.04, mixed mode, sharing, tiered, compressed oops, g1 gc, linux-amd64)
# Problematic frame:
# V [libjvm.so+0x7178f4]








 ,






URL записи