Fix strictly only the remaining linker errors ("undefined reference") in the Docker build of the Qt6 migration.
Qt6 Migration CI / migrate (push) Waiting to run
Qt6 Migration CI / migrate (push) Waiting to run
This commit is contained in:
1 file changed
+95
@@ -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
|
||||
Reference in new issue
Block a user