2016-04-13 7 views
0

Dies ist mein erster Versuch, eine Qt-Anwendung auf verschiedenen Systemen auszuführen.Bereitstellung der Rückwärtskompatibilität der statisch verknüpften Qt-Anwendung

Ich habe mich für die statische Linking-Methode entschieden. Ich habe bereits die Quellen von Qt 5.5 kompiliert und meine Anwendung mit dem statischen Qt kompiliert. Die ausführbare Datei funktioniert auf meinem Computer einwandfrei. Mein Betriebssystem ist Ubuntu 15.04. Aber als ich versuchte, die gleiche ausführbare Datei auf Ubuntu 14.04 auszuführen, geriet ich in Schwierigkeiten. Die wichtigsten Details der Fehlermeldung sind unten aufgeführt.

libstdC++. So.6 cxxabi_1.3.8 nicht

gefunden

habe ich eine Standard-Google-Suche und erkennen, dass es war, weil ich eine neuere Version davon auf meinem Rechner hatte, die Maschine, wo ich geschaffen hatte, die ausführbare Datei. Es gab so viele verschiedene Ansätze, um dieses Problem zu lösen. Eine der Lösungen, die ich sah, beinhaltete das Versenden Ihrer eigenen Kopie von libstdc++.so mit der ausführbaren Datei. Aber als ich versuchte, die .so-Datei auf einen USB-Stick zu kopieren, gab es eine Warnung, dass das Dateisystem solche Dateien nicht unterstützt.

Meine Frage ist, was mache ich falsch? Auch wenn ich das ausführbare Ziel Ubuntu 10.04 machen wollte, was wäre die korrekte Prozedur, die die Abwärtskompatibilitätsprobleme behandelt. Ich weiß, dass eine Methode wäre, das gleiche Betriebssystem auf meinem Computer zu installieren und dann die ausführbare Datei zu erstellen, gibt es einen anderen Weg?

Antwort

0

libstd ++ ist rückwärtskompatibel, aber nicht vorwärtskompatibel, was bedeutet, dass Sie ein Programm mit einer neueren Version von libstdC++ ausführen können als das, mit dem Sie es kompiliert haben, aber nicht umgekehrt. Das hast du erfahren.

Eine Möglichkeit, mit diesem Problem umzugehen, ist die Verwendung älterer Betriebssystemversionen als Build-Maschine. Wenn Sie beispielsweise Ubuntu 14.04 LTS verwenden, erhalten Sie this list of compatible target systems.

Das Build-System, das Sie verwenden, wird wahrscheinlich die verfügbaren Compiler beschränken. Auf Ubuntu 14.04 bekommst du GCC 4.8, was gut für die meisten C++ 11 ist und Pakete für clang 3.6 sind verfügbar, die dir volle C++ 14 Unterstützung geben.

Die Ausrichtung auf Ubuntu 10.04 ist eine Herausforderung, wenn Sie keinen Steinzeit-Compiler verwenden möchten.

Die Idee des Versands von libstdC++ wird Ihnen nicht viel helfen, weil Sie auf dasselbe Problem mit libc stoßen werden.

+0

Danke für die Antwort, aber gibt es irgendein Standard altes Betriebssystem, die Firmen, die QT-Anwendungen verwenden, um die alten Ubuntu-Versionen zu bauen, das war mein größter Zweifel –

+0

Welche Kompatibilität benötigen Sie? Welchen Compiler brauchen Sie? Welchen C++ Standard verwenden Sie in Ihrer Anwendung? Dies ist eine sehr benutzerdefinierte Frage. Angesichts der Tatsache, dass alle typischen Linux-Distributionen gemacht werden, um ihre Pakete aus dem Quellcode zu kompilieren, gibt es keine allgemeine Antwort auf diese Frage. Linux ist nicht für proprietäre Software optimiert. –

+0

Ich würde gerne Kompatibilität von Ubuntu 10.04, C++ Standard gnu ++ 98, Entschuldigung für die nicht spezifisch sein, aber ich dachte früher, es gäbe eine allgemeine Vorgehensweise. –

Verwandte Themen