Skip to content
New issue

Have a question about this project? Sign up for a free GitHub account to open an issue and contact its maintainers and the community.

By clicking “Sign up for GitHub”, you agree to our terms of service and privacy statement. We’ll occasionally send you account related emails.

Already on GitHub? Sign in to your account

[BUG] qtjambi-native-linux-x64 crash on ubuntu 24.04 #203

Closed
long76 opened this issue Jul 3, 2024 · 13 comments
Closed

[BUG] qtjambi-native-linux-x64 crash on ubuntu 24.04 #203

long76 opened this issue Jul 3, 2024 · 13 comments
Assignees
Labels

Comments

@long76
Copy link

long76 commented Jul 3, 2024

Describe the bug
crash start up on ubuntu 24.04

To Reproduce
Steps to reproduce the behavior:

  1. run qtjambi app well work on Ubuntu 22.04 in Ubuntu 24.04
  2. See error
#
# A fatal error has been detected by the Java Runtime Environment:
#
#  SIGSEGV (0xb) at pc=0x00007bee64766ca1, pid=2660, tid=2661
#
# JRE version: OpenJDK Runtime Environment (11.0.23+9) (build 11.0.23+9-post-Ubuntu-1ubuntu1)
# Java VM: OpenJDK 64-Bit Server VM (11.0.23+9-post-Ubuntu-1ubuntu1, mixed mode, sharing, tiered, compressed oops, g1 gc, linux-amd64)
# Problematic frame:
# C  [libQt5Core.so.5.15.13+0x166ca1]  operator==(QString const&, QString const&)+0x11
#
# Core dump will be written. Default location: Core dumps may be processed with "/usr/share/apport/apport -p%p -s%s -c%c -d%d -P%P -u%u -g%g -- %E" (or dumping to /home/user/MyProgram/core.2660)
#
# An error report file with more information is saved as:
# /home/user/MyProgram/hs_err_pid2660.log
#
# If you would like to submit a bug report, please visit:
#   https://bugs.launchpad.net/ubuntu/+source/openjdk-lts
# The crash happened outside the Java Virtual Machine in native code.
# See problematic frame for where to report the bug.
#

hs_err_pid2660.log

Expected behavior
start app without errors

System (please complete the following information):

  • OS: Kubuntu 24.04
  • Java version 11.0.23
  • QtJambi version 5.15.20
  • Qt version 5.15.13

Additional context
hs_err_pid2660.log

@long76 long76 added the bug label Jul 3, 2024
@wolfseifert
Copy link

You are using /usr/lib/x86_64-linux-gnu/libQt5Core.so.5.15.13, installed by the Kubuntu package manager. QtJambi is built against the Qt-online-installed version (see https://doc.qt.io/qt-5/gettingstarted.html). You should try this version and see if it still dumps. Unfortunately there is no 5.15.13, only 5.15.0, 5.15.1 and 5.15.2. So probably Kubuntus 5.15.13 causes the problem and this has changed with the upgrade from 22.04.

@omix
Copy link
Contributor

omix commented Jul 5, 2024

@wolfseifert thank you for your comment. You are right. However, the stack trace indicates it is not because of incompatibility.
During application startup Qt tries to load style plugins. Here, an access violation takes place in Qt independent from QtJambi.
Is there an env variable QT_QUICK_CONTROLS_CONF set? Otherwise, Qt searches in a directory called :/. In QtJambi, this directory includes the Java classpath. Maybe there is the error because a string coming from Java classpath is invalid.

You could try to run the application with setting QT_QUICK_CONTROLS_CONF to any existing directory.
Additionally, I suggest to print the :/ directory prior to app initialization:

QDir dir = new QDir(":/");
QStringList entries = dir.entryList(new QStringList(), QDir.Filter.Dirs, QDir.Filter.NoDotAndDotDot);
for(String file : entries){
    // check if file string is valid
}

@long76
Copy link
Author

long76 commented Jul 10, 2024

@wolfseifert thank you for your comment. You are right. However, the stack trace indicates it is not because of incompatibility. During application startup Qt tries to load style plugins. Here, an access violation takes place in Qt independent from QtJambi. Is there an env variable QT_QUICK_CONTROLS_CONF set? Otherwise, Qt searches in a directory called :/. In QtJambi, this directory includes the Java classpath. Maybe there is the error because a string coming from Java classpath is invalid.

You could try to run the application with setting QT_QUICK_CONTROLS_CONF to any existing directory. Additionally, I suggest to print the :/ directory prior to app initialization:

QDir dir = new QDir(":/");
QStringList entries = dir.entryList(new QStringList(), QDir.Filter.Dirs, QDir.Filter.NoDotAndDotDot);
for(String file : entries){
    // check if file string is valid
}

Thanks, adding env QT_QUICK_CONTROLS_CONF to empty exists dir helps, log on startup

MESA: error: ZINK: failed to choose pdev
glx: failed to create drisw screen

QDir dir = new QDir(":/"); crash app this the same error even if QT_QUICK_CONTROLS_CONF is specifed

App try to run

package org.example;

import io.qt.core.QCoreApplication;
import io.qt.core.QDir;
import io.qt.core.QSettings;
import io.qt.core.QStringList;
import io.qt.widgets.QApplication;
import io.qt.widgets.QMainWindow;

import static java.lang.System.exit;

public class QtApp {
    public static void main(String[] args) {
        System.out.println("Hello world!");
        QSettings.setDefaultFormat(QSettings.Format.IniFormat);
        QCoreApplication.setOrganizationName("QtApp");
        QCoreApplication.setApplicationName("QtApp");
        QCoreApplication.setOrganizationDomain("example.org");
        QApplication.initialize(args);
        //// IF COMMENT
        QDir dir = new QDir(":/");
        QStringList entries = dir.entryList(new QStringList(), QDir.Filter.Dirs, QDir.Filter.NoDotAndDotDot);
        for(String file : entries){
            // check if file string is valid
            System.out.println(file);
        }
        //// THEN RUN
        QMainWindow mainWindow = new QMainWindow();
        mainWindow.show();
        exit(QApplication.exec());
    }
}

@omix
Copy link
Contributor

omix commented Jul 11, 2024

Fantastic. Could you attach the hs_err_pid file from the QDir(":/") crash? Also did it print at least some of the entries or did it crash immediately? Could you also please try the same with QDir("classpath:/")?

@wolfseifert
Copy link

I ran QtApp now on Kubuntu 24.04 and got exactly the same error (crash) as you. Running QtApp with -Djava.library.path=~/qt/5.15.2/gcc_64/lib (i.e. the Qt-online-installed version) solved the issue (no crash).

@long76
Copy link
Author

long76 commented Jul 12, 2024

I ran QtApp now on Kubuntu 24.04 and got exactly the same error (crash) as you. Running QtApp with -Djava.library.path=~/qt/5.15.2/gcc_64/lib (i.e. the Qt-online-installed version) solved the issue (no crash).

yes, i know, if use portable Qt version all works) but if system have qt already why i must use portable version?)

@omix
Copy link
Contributor

omix commented Jul 12, 2024

Fantastic. Could you attach the hs_err_pid file from the QDir(":/") crash? Also did it print at least some of the entries or did it crash immediately? Could you also please try the same with QDir("classpath:/")?

It would help if you would reply to my questions above.

@long76
Copy link
Author

long76 commented Jul 12, 2024

Fantastic. Could you attach the hs_err_pid file from the QDir(":/") crash? Also did it print at least some of the entries or did it crash immediately? Could you also please try the same with QDir("classpath:/")?

crash immediately on create QDir

Hello world!
MESA: error: ZINK: failed to choose pdev
glx: failed to create drisw screen
#
# A fatal error has been detected by the Java Runtime Environment:
#
#  SIGSEGV (0xb) at pc=0x000070080d166ca1, pid=4112, tid=4113
#
# JRE version: OpenJDK Runtime Environment (11.0.23+9) (build 11.0.23+9-post-Ubuntu-1ubuntu1)
# Java VM: OpenJDK 64-Bit Server VM (11.0.23+9-post-Ubuntu-1ubuntu1, mixed mode, sharing, tiered, compressed oops, g1 gc, linux-amd64)
# Problematic frame:
# C  [libQt5Core.so.5.15.13+0x166ca1]  operator==(QString const&, QString const&)+0x11
#
# Core dump will be written. Default location: Core dumps may be processed with "/usr/share/apport/apport -p%p -s%s -c%c -d%d -P%P -u%u -g%g -- %E" (or dumping to /home/user/QtApp/core.4112)
#
# An error report file with more information is saved as:
# /home/user/QtApp/hs_err_pid4112.log
#
# If you would like to submit a bug report, please visit:
#   https://bugs.launchpad.net/ubuntu/+source/openjdk-lts
# The crash happened outside the Java Virtual Machine in native code.
# See problematic frame for where to report the bug.
#

hs_err_pid4112.log

with classpath:/ crash too

Hello world!
MESA: error: ZINK: failed to choose pdev
glx: failed to create drisw screen
#
# A fatal error has been detected by the Java Runtime Environment:
#
#  SIGSEGV (0xb) at pc=0x00007df763b66ca1, pid=5599, tid=5600
#
# JRE version: OpenJDK Runtime Environment (11.0.23+9) (build 11.0.23+9-post-Ubuntu-1ubuntu1)
# Java VM: OpenJDK 64-Bit Server VM (11.0.23+9-post-Ubuntu-1ubuntu1, mixed mode, sharing, tiered, compressed oops, g1 gc, linux-amd64)
# Problematic frame:
# C  [libQt5Core.so.5.15.13+0x166ca1]  operator==(QString const&, QString const&)+0x11
#
# Core dump will be written. Default location: Core dumps may be processed with "/usr/share/apport/apport -p%p -s%s -c%c -d%d -P%P -u%u -g%g -- %E" (or dumping to /home/user/QtApp/core.5599)
#
# An error report file with more information is saved as:
# /home/user/QtApp/hs_err_pid5599.log
#
# If you would like to submit a bug report, please visit:
#   https://bugs.launchpad.net/ubuntu/+source/openjdk-lts
# The crash happened outside the Java Virtual Machine in native code.
# See problematic frame for where to report the bug.
#

hs_err_pid5599.log

P.S. QT_QUICK_CONTROLS_CONF is set

@omix
Copy link
Contributor

omix commented Jul 12, 2024

Yes, QT_QUICK_CONTROLS_CONF avoids QtQuick library from checking directory :/.
:/ represents the entire Qt resource path including Java class path
classpath:/ represents Java classpath only
The error necessarily is in QtJambi because it crashes for classpath:/. I will need to setup a VM with Kubuntu and try to find the reason.

@wolfseifert
Copy link

I built now QtJambi (master) successfully from sources against Kubuntu 24.04 Qt libs. Using the generated jars QtApp runs without problems (also without online-installed-Qt). The build QTDIR for Kubuntu 24.04 looks like this:

qtdir$ ls -l
bin -> /usr/lib/x86_64-linux-gnu/qt5/bin
include -> /usr/include/x86_64-linux-gnu/qt5/
lib -> /usr/lib/x86_64-linux-gnu/
libexec -> /usr/lib/x86_64-linux-gnu/qt5/libexec/
mkspecs -> /usr/lib/x86_64-linux-gnu/qt5/mkspecs
plugins -> /usr/lib/x86_64-linux-gnu/qt5/plugins
qml -> /usr/lib/x86_64-linux-gnu/qt5/qml

Of course all needed Qt packages must be installed using the Kubuntu installer.

@long76
Copy link
Author

long76 commented Aug 14, 2024

I built now QtJambi (master) successfully from sources against Kubuntu 24.04 Qt libs. Using the generated jars QtApp runs without problems (also without online-installed-Qt). The build QTDIR for Kubuntu 24.04 looks like this:

qtdir$ ls -l
bin -> /usr/lib/x86_64-linux-gnu/qt5/bin
include -> /usr/include/x86_64-linux-gnu/qt5/
lib -> /usr/lib/x86_64-linux-gnu/
libexec -> /usr/lib/x86_64-linux-gnu/qt5/libexec/
mkspecs -> /usr/lib/x86_64-linux-gnu/qt5/mkspecs
plugins -> /usr/lib/x86_64-linux-gnu/qt5/plugins
qml -> /usr/lib/x86_64-linux-gnu/qt5/qml
Of course all needed Qt packages must be installed using the Kubuntu installer.

you can upload artifact in somewhere? i try it on old ubuntu if it will work then solution is just set build env to last ubuntu lts

P.S. maybe problem in kubuntu 22.04, we can wait release kubuntu 22.04.1 and maybe it will be fixed

@wolfseifert
Copy link

No, I deleted Kubuntu 24.04 already.

You have two options now:

  1. Build QtJambi from sources against Kubuntu 24.04 yourself and use the generated artifacts.
  2. Use the artifacts from maven central and use the "online-installed-Qt" at runtime.

omix added a commit that referenced this issue Oct 8, 2024
@omix omix closed this as completed Oct 9, 2024
@long76
Copy link
Author

long76 commented Oct 12, 2024

Thank you very much! All works!

Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment
Labels
Projects
None yet
Development

No branches or pull requests

3 participants