👉 Jetzt bei Amazon nach deinem nächsten Gaming PCs stöbern (Affiliate-Link – ich erhalte eine kleine Provision, für dich bleibt der Preis gleich)

 

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.