Cross Compilation von Qt OPC UA Server auf Raspberry Pi 4B funktioniert nicht

Heute ist Stammtischzeit:
Jeden Donnerstag 20:30 Uhr hier im Chat.
Wer Lust hat, kann sich gerne beteiligen. ;)
  • Liebe Community,

    aktuell versuche ich einen OPC UA Stand-Alone Server als Qt-App auf dem Rasperry Pi 4B auszuführen.

    Anbei meine Systemumgebung:

    Für den Cross-Compilation-Vorgang habe ich die folgende Anleitung verwendet: https://wapel.de/?p=842

    Der Quellcode der Server-Applikation basiert auf dem offiziellen Wasserpumpen-Beispiel von Qt:

    https://doc.qt.io/QtOPCUA/qtopcu…pp-example.html

    Mein exaktes Problem ist folgendes:

    Nach dem Bauen des Software-Builds bekomme ich folgenden Fehler ausgegeben innerhalb des Compiler-Log-Fensters:

    Code
    /tmp/ccF0J1PW.s: Assembler messages:
    /tmp/ccF0J1PW.s:4206: IT blocks containing 32-bit Thumb instructions are deprecated in ARMv8
    /tmp/ccF0J1PW.s:13562: IT blocks containing 32-bit Thumb instructions are deprecated in ARMv8
    /tmp/ccF0J1PW.s:71648: IT blocks containing 32-bit Thumb instructions are deprecated in ARMv8

    Zusätzlich erscheint folgendes Feld:

    Nach dem Klicken auf die Schaltfläche "Ja" erhalte ich den folgenden Fehler im Anwendungs-Log-Fenster:

    Code
    Could not initialize server.
    double free or corruption (fasttop)

    Das Development-Kit für den Raspberry-Pi besteht aus der folgende C++/C-Compiler-Kombination:

    • C++ Compiler: gcc-linaro-7.5.0-2019.12-x86_64_arm-linux-gnueabihf-g++
    • C Compiler: gcc-linaro-7.5.0-2019.12-x86_64_arm-linux-gnueabihf-gcc

    Gibt es jemand im Forum, der vielleicht schon einmal ein ähnliches Fehlerbild hatte?

    Was kann ich tun, um diesen Fehler zu lösen oder ggfs. zu umgehen?

    Im Voraus schon einmal Vielen Dank!

    Ich freue mich auf eure Rückmeldung :)

  • Cross Compilation von Qt OPC UA Server auf Raspberry Pi 4B funktioniert nicht? Schau mal ob du hier fündig wirst!

  • Wenn man deinen Fehler googelt, kommt man hierher: https://gcc.gnu.org/legacy-ml/gcc-…0/msg00830.html Wenn man sich dann die GCC Release-Geschichte ansieht, dann faellt auf, dass GCC 7 (als generelles release) *vor* dem Datum released wurde: https://gcc.gnu.org/releases.html

    GCC 7.5 ist zwar deutlich neuer, es ist mir aber nicht gelungen, den Patch einem bestimmten Release zuzuordnen. Und ich kenne die GCC Release Policy nicht, was die also aufnehmen in eine Version, oder nicht.

    Generell ist es aber ein Problem der Code-Generierung des Compilers, das nur durch einen neuere Version geloest werden kann.

    ABER: das ist in meinen Augen ein roter Hering, es handelt sich ja genau *nicht* um einen Fehler, sondern um eine Warnung. Die erzeugten Instruktionen sind wohl nicht optimal, aber das heisst nicht, dass sie nicht funktionieren. Und deine Fehlermeldung passt auch nicht dazu. Die waere etwas das "illegal instruction" oder aehnliches heisst.


    Das was du da bekommst, sieht nach einem stinknormalen Anwendungsfehler aus. Du gibst Speicher zweimal frei. Dem ist mit Dingen wie GDB, ASAN oder Valgrind beizukommen, wobei ich nicht weiss, ob letzteres auf dem Pi wirklich eine Option ist.

    2 Mal editiert, zuletzt von MistyFlower59469 (20. Februar 2021 um 03:13)

  • Hallo _deets_,

    erst mal vielen Dank für die Fehlerrecherche und Deine zeitnahe Rückmeldung.

    ABER: das ist in meinen Augen ein roter Hering, es handelt sich ja genau *nicht* um einen Fehler, sondern um eine Warnung. Die erzeugten Instruktionen sind wohl nicht optimal, aber das heisst nicht, dass sie nicht funktionieren. Und deine Fehlermeldung passt auch nicht dazu. Die waere etwas das "illegal instruction" oder aehnliches heisst.

    Du meinst, ein Update der Compilerversion (sobald verfügbar) würde diese Warnung (die den Programmablauf stört, jedoch nicht behindert) beheben?

    Das was du da bekommst, sieht nach einem stinknormalen Anwendungsfehler aus. Du gibst Speicher zweimal frei. Dem ist mit Dingen wie GDB, ASAN oder Valgrind beizukommen, wobei ich nicht weiss, ob letzteres auf dem Pi wirklich eine Option ist.

    Ich werde die von Dir vorgeschlagenen Debugger in mein Entwicklungs-Kit einbauen und versuchen, die vermutete Fehlerursache der doppelten Speicherbelegung im Quellcode zu ergründen. Sobald ich News bgzl. der Fehleranalyse habe, werde ich mich hier wieder zu Wort melden.

    Vielen Dank nochmal! :)

  • Hallo _deets_,

    Ich werde die von Dir vorgeschlagenen Debugger in mein Entwicklungs-Kit einbauen und versuchen, die vermutete Fehlerursache der doppelten Speicherbelegung im Quellcode zu ergründen. Sobald ich News bgzl. der Fehleranalyse habe, werde ich mich hier wieder zu Wort melden.

    Nach intensiver Fehlersuche mit dem GDB-Debugger bin ich auf den folgenden Fehler gestoßen:

    Nach der Recherche der Fehlerausgabe "Remote 'g' packet reply is too long" bin ich auf folgende Forum-Einträge bei StackOverflow gestoßen:

    Beide Foren-Einträge verweisen auf den Befehl: set architecture i386:x86-64:intel

    Allerdings bin ich mir nicht sicher, ob ich damit den Fehler behebe?

    Muss dieser Befehl innerhalb eines Terminal-Fensters auf der Linux Host-VM oder auf dem Raspberry Pi als Zielgerät eingegeben werden?

    Vielen Dank schon mal für deine / eure Mithilfe!

  • Das hat nichts mit deinem eigentlichen Problem zu tun. Sondern ist etwas das mit deinem GDB und Remote debugging setup zu tun hat. Das sind komplexe Themen. Ich würde dir raten, da entweder erstmal lokal zu arbeiten. Oder eben entsprechend nochmal mehr Sorgfalt und Prüfung in dein Setup zu investieren.

  • Hallo _deets_,

    danke für die schnelle Rückmeldung.

    Ich würde dir raten, da entweder erstmal lokal zu arbeiten.

    Lokal arbeiten heißt in deinem Kontext was genau?

    Beim Erstellen des Projektes auf der Host-VM im Debug-Modus werden mir keine Probleme angezeigt.

    Meinst du vielleicht damit, das Projekt mit einer direkten Qt Creator Installation auf dem Rapsberry Pi selbst auszuführen (ohne Cross-Compilation) ?

    Im Voraus schon einmal Vielen Dank!

    Einmal editiert, zuletzt von Mauda (24. Februar 2021 um 15:49)

Jetzt mitmachen!

Du hast noch kein Benutzerkonto auf unserer Seite? Registriere dich kostenlos und nimm an unserer Community teil!