14.04.01 32-Bit: Fehlende g ++ 64-Bit-Include-Dateien beim Cross-Compilieren

8

Also habe ich 32-Bit Xubuntu 14.04.1 installiert. Wir haben einen Schnittstellencode, in dem wir SOs für die verschiedenen von uns unterstützten Plattformen und Windows-DLLs veröffentlichen möchten. (Ja ich weiß, binäre Veröffentlichung schlecht, aber auch hier nicht relevant.)

Ich versuche, 32-Bit- und 64-Bit-SOs mit 32-Bit 14.04.01 unter Verwendung von -m32/ -m64gcc / g ++ - Argumenten zu erstellen . Die 32-Bit-Version funktioniert einwandfrei, die 64-Bit-Version schlägt jedoch fehl

/usr/include/c++/4.8/string:38:28: fatal error: bits/c++config.h: No such file or directory

Beim Einchecken der Includes ist diese Datei für 32-Bit wirklich vorhanden, für 64-Bit fehlt sie jedoch.

Beim Googeln des Problems scheint dies in der Vergangenheit für GCC / G ++ 4.6 passiert zu sein, wird dann aber als behoben markiert. 14.04.1 verwendet jedoch GCC / G ++ 4.8, was darauf hindeutet, dass diese Bibliotheken in GCC / G ++ 4.8 eine Regression aufweisen. Ist das etwas, was jemand anderes gesehen hat?

Ich könnte bei Bedarf eine neue VM für 64-Bit 14.04.1 einrichten und prüfen, ob dadurch die richtigen Bibliotheksversionen abgerufen werden. Ich würde es aber lieber nicht tun, wenn es möglich ist, da ich eine Reihe anderer Dinge habe, die ich ebenfalls neu installieren müsste. Gibt es eine bessere Lösung? Und wenn ich 64-Bit 14.04.1 installiert hätte, wäre ich dann definitiv in der Lage, auf 32-Bit zurück zu kompilieren, ohne Header in die andere Richtung zu verpassen?

Graham
quelle
... vielleicht sollten Sie es vermeiden, Dinge zu erwähnen, die "hier nicht relevant" sind, da sie nicht relevant sind.
Mike, was auch immer
2
Haben Sie das g++-multilibPaket installiert ?
Steeldriver
@steeldriver Danke - das wars! Die 64-Bit-Installation sieht standardmäßig so aus, die 32-Bit-Installation jedoch nicht. OK, noch etwas zu meiner Checkliste "So richten Sie eine Linux-Build-VM ein" hinzuzufügen. :) Es mag einfach erscheinen, aber ich habe dies nicht als Antwort in den Fragen anderer Leute für denselben Kompilierungsfehler gesehen, und ich bin nicht wirklich ein Linux-Experte.
Graham

Antworten:

9

Die 64-Bit-Datei / c ++ config.h wird auf 32-Bit-Systemen (und umgekehrt) durch Installation des g++-multilibPakets bereitgestellt. Sie müssen dieses Paket also entweder über Software Center, Synaptic oder über das Terminal mithilfe installieren

sudo apt-get install g++-multilib

Dies ist nur ein Abhängigkeitspaket, das g++-4.8-multilibfür die Standardversion gcc / g ++ aufgelöst wird und wiederum von lib64stdc++-4.8-dev(64-Bit-Kompilierung auf 32-Bit) oder libx32stdc++-4.8-dev(32-Bit-Kompilierung auf 64-Bit) abhängt - diese enthalten das tatsächliche Header-Dateien.

Es gibt einen äquivalenten Satz von Paketen für den einfachen C-Compiler gcc.

Steeldriver
quelle
4
sudo apt-get install g++-5-multilibhabe mir die Version besorgt, die ich brauchte. Wenn dies bei Ihnen nicht funktioniert, ist note sudo add-apt-repository ppa:ubuntu-toolchain-r/test && sudo apt-get updateauch Teil meiner Konfiguration.
U007D