96 lines
3.8 KiB
Markdown
96 lines
3.8 KiB
Markdown
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
|