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