From 1c4d33d5d5871c2325a61a308ade1062ce90fd72 Mon Sep 17 00:00:00 2001 From: Torsten Wierschin Date: Sat, 12 Sep 2026 10:41:18 +0000 Subject: [PATCH] Fix strictly only the remaining linker errors ("undefined reference") in the Docker build of the Qt6 migration. --- ...ing-linker-errors-undefined-refs.prompt.md | 95 +++++++++++++++++++ 1 file changed, 95 insertions(+) create mode 100644 prompts/fix-strictly-only-remaining-linker-errors-undefined-refs.prompt.md diff --git a/prompts/fix-strictly-only-remaining-linker-errors-undefined-refs.prompt.md b/prompts/fix-strictly-only-remaining-linker-errors-undefined-refs.prompt.md new file mode 100644 index 000000000..43af518ad --- /dev/null +++ b/prompts/fix-strictly-only-remaining-linker-errors-undefined-refs.prompt.md @@ -0,0 +1,95 @@ +Behebe strikt nur die verbleibenden Linker-Fehler ("undefined reference") im Docker-Build der Qt6-Migration. + +Kontext: +- arbeite ausschließlich Docker-basiert +- maßgeblich ist: + qt-migration-legatus/qt6-after/qt6-migrated-legatus/docker_build.sh +- Repo ist im Container gemountet; Mount-Punkt kann /workspace ODER /repo sein +- keine hartkodierten Annahmen auf /workspace, wenn /repo möglich ist +- aktueller Build: + - ubuntu:26.04 + - build4 + - BUILD_RTI=ON + - BUILD_ARCGIS=OFF + - CMAKE_CXX_STANDARD=17 + - RTI Connext 7.7.0 +- aktuelle DDS-Targets: + ddscore ddsftccore ddsQoS ddsconnector ddsfts + +Betroffene Codegen-Dateien: +- qt-migration-legatus/qt6-after/qt6-migrated-legatus/cmake/MacroCodeGenIdl.cmake +- qt-migration-legatus/qt6-after/qt6-migrated-legatus/cmake/MacroRTIDDSGen.cmake + +Wichtige Invarianten: +- .idl-Dateien werden generiert und entstehen in Build-Ordnern +- generierte .idl-Dateien dürfen NUR aus Build-Ordnern für weitere Verarbeitung zu .h/.cpp/.cxx verwendet werden +- durch Codegen erzeugte .h/.cpp/.cxx dürfen ebenfalls NUR in Build-Ordnern entstehen +- generierte Dateien dürfen nicht in den Source-Tree geschrieben oder von dort eingebunden werden + +Fehlerbild: +Target svcTabCommon scheitert beim Linken von tab.cxx.o / tab_json.cpp.o mit undefined references auf Typen aus fremden IDL-Modulen, u. a.: +- Core::GeoPosition, GeoPosition2D, GeoPositionRelativeTime, Orientation, RelativePosition + - Default-Ctor + - operator== + - operator!= + - operator<< + - swap +- ProjectDataManagement::* operator<< + - z. B. L27_EffectorId, L28_Status, VulnerabilityState, WphMode, UasState +- rti::topic::dynamic_type<...>::get() +- dds::topic::topic_type_support<...>::reset_sample / allocate_sample + +Aufgabe: +1. Root Cause ermitteln: + - TrainingAreaBase/tab.idl referenziert Typen aus Core und ProjectDataManagement + - deren generierte RTI-/DDS-Sourcen werden vermutlich nicht erzeugt, nicht kompiliert oder nicht an svcTabCommon gelinkt + +2. Prüfen: + - Zusammenspiel/Reihenfolge von MacroCodeGenIdl.cmake und MacroRTIDDSGen.cmake + - rtiddsgen-Aufrufe + - IDL-Include-Pfade: müssen auf Build-Ordner zeigen, nicht Source-Tree + - tatsächlich erzeugte Dateien in build4 + - add_library / target_sources / target_link_libraries + - Link-Reihenfolge und Target-Abhängigkeiten + - C++-Codegen-Modus und ABI: C++11/Modern C++ vs. alter Modus + - einheitlicher CMAKE_CXX_STANDARD=17 + - ob /workspace-vs-/repo-Pfade Codegen, Includes oder Linking beschädigen + +3. Minimal beheben: + - fehlende generierte Quellen im Build-Ordner erzeugen + - fehlende generierte Quellen den richtigen Targets hinzufügen + - fehlende Bibliotheken/Targets korrekt an svcTabCommon linken + - Target-Abhängigkeiten so setzen, dass Core/ProjectDataManagement vor TrainingAreaBase verfügbar sind + +Verbote: +- keine Workarounds +- kein --allow-shlib-undefined +- kein -Wl,--unresolved-symbols +- keine Stub- oder Dummy-Implementierungen +- keine generierten Artefakte im Source-Tree +- keine Refactorings +- keine Opportunitäts-Fixes +- nichts im Legacy-Tree ändern +- keine IDL-Quellen ändern, außer sie sind nachweislich Root Cause + +Scope: +- docker_build.sh +- app/Dockerfile nur falls zwingend nötig +- MacroCodeGenIdl.cmake +- MacroRTIDDSGen.cmake +- direkt ursächliche CMakeLists/CMake-Dateien für Codegen und Linking der betroffenen Proxies + +Validierung: +- Docker-Build erneut ausführen +- Link-Stage prüfen +- bestätigen, dass die genannten undefined references verschwunden sind +- mit nm + c++filt stichprobenartig prüfen, dass zuvor fehlende Symbole nun in gelinkten Objekten/Libraries vorhanden sind +- prüfen, dass keine generierten .idl/.h/.cpp/.cxx im Source-Tree entstanden sind +- wenn praktikabel: Build mit /workspace und /repo Mount-Punkt testen + +Abschlussbericht kurz: +- behoben / teilweise behoben +- Root Cause +- geänderte Dateien +- exakte Docker-Kommandos +- verbleibende Fehler oder Blocker