Ausführen der C++11-Bibliothek mit älterer libc

Ausführen der C++11-Bibliothek mit älterer libc

Ich habe eine gemeinsam genutzte Bibliothek mit C++11-Funktionen geschrieben, die mit gcc 4.8, libc 2.18 kompiliert wurde und auf einem CentOS 6-Computer eines Clients ausgeführt werden muss, auf dem gcc 4.4.7, libc 2.12 installiert ist. Diese Bibliothek enthält einige Symbole, die in libc 2.12 nicht zu finden sind. Wie kann ich diese Bibliothek also auf CentOS 6 verwenden? Ich bin flexibel, wie, wo und auf welchem ​​Computer die Bibliothek kompiliert werden kann, aber letztendlich sollte sie auf einem CentOS 6-Client verwendbar sein, auf dem Pakete nicht berührt werden können. Ist es in Ordnung, sie mit DevTools-2 auf CentOS 6 zu kompilieren, oder kann es zu ABI-bezogenen Problemen kommen? Bitte lassen Sie mich wissen, wenn Sie weitere Vorschläge haben. Vielen Dank im Voraus.

Antwort1

Kompilieren Sie auf demselben System, auf dem es ausgeführt wird. Möglicherweise müssen Sie bei einem Versionssprung der Distribution (z. B. von 7 auf 8) und manchmal auch dazwischen neu kompilieren.

Wenn Sie unterschiedliche Compilerversionen verwenden,könntestoßen auf Inkompatibilitäten zwischen den gemeinsam genutzten Hilfsbibliotheken für den Compiler, den Basisbibliotheken C oder C++ (höchstwahrscheinlich) oder verschiedenen externen Abhängigkeiten. Kein Durcheinander, das ich gerne debuggen würde.

Antwort2


C++11-Funktionen, kompiliert mit gcc 4.8

? Warum nicht g++ 4.8?

Vorschlag: Kompilieren Sie Ihre Bibliothek statisch mit libstdc++.a → Ich denke, die C++11-Funktionen befinden sich in *libstdc++-devel, nicht in glibc.

Das devtoolset-2-libstdc++-devel-4.8.2 wird mit statischen Bibliotheken geliefert:

/opt/rh/devtoolset-2/root/usr/lib/gcc/x86_64-redhat-linux/4.8.2/{ libstdc++.a, libstdc++_nonshared.a }


verwandte Informationen