
Bei der Arbeit mit log4shib-2.0.0 stößt man beim Kompilieren mit modernen C++-Compilern häufig auf folgende Fehlermeldung:
../include/log4shib/Priority.hh:106:9: error: ISO C++17 does not allow dynamic exception specificationsCode-Sprache: PHP (php)
Diese Fehlermeldung tritt auf, weil log4shib noch veraltete C++-Features verwendet, die in C++17 nicht mehr unterstützt werden. Konkret handelt es sich um Dynamic Exception Specifications – eine Syntax, die bereits in C++11 als deprecated markiert und in C++17 vollständig entfernt wurde.
Die Ursache verstehen
Dynamic Exception Specifications waren ein Feature in älteren C++-Standards, bei dem Funktionen explizit angeben konnten, welche Exceptions sie werfen können:
// Veraltete Syntax - in C++17 nicht mehr erlaubt
void function() throw(std::exception);Code-Sprache: JavaScript (javascript)
Diese Syntax wurde aus verschiedenen Gründen entfernt:
- Sie bot keine echten Performance-Vorteile
- Die Laufzeit-Überprüfung war kostspielig
- Sie führte zu unvorhersagbarem Verhalten
Die Lösung: Downgrade auf C++14
Die einfachste und praktischste Lösung ist es, beim Build explizit C++14 zu verwenden, da log4shib mit diesem Standard kompatibel ist.
Build-Skript Beispiel
#!/bin/bash
# Explizit C++14 Standard setzen
export CXXFLAGS="$CXXFLAGS -std=c++14"
export CFLAGS="$CFLAGS -std=c++14"
# log4shib-2.0.0 kompilieren
cd log4shib-2.0.0
./configure \
--prefix=/opt/build/log4shib-2.0.0 \
--libdir=/opt/build/log4shib-2.0.0/lib64
make
make installCode-Sprache: PHP (php)
Warum diese Lösung funktioniert
Compiler-Flags setzen: Die Environment-Variablen CXXFLAGS und CFLAGS werden vom Build-System verwendet, um dem Compiler mitzuteilen, welchen C++-Standard er verwenden soll.
Prefix und Libdir: Die Configure-Optionen stellen sicher, dass log4shib in einen isolierten Pfad installiert wird, was Konflikte mit anderen Bibliotheken vermeidet.
Kompatibilität: C++14 unterstützt noch die Dynamic Exception Specifications, die log4shib verwendet, während es gleichzeitig modern genug ist für die meisten aktuellen Projekte.