C++ 32-Bit-Binärdatei auf 64-Bit-System erstellen

C++ 32-Bit-Binärdatei auf 64-Bit-System erstellen

Ich habe also ein Projekt, das ich sowohl als 64-Bit-Binärdatei als auch als 32-Bit-Binärdatei erstellen möchte.
Meine Maschine selbst ist 64-Bit und die 64-Bit-Kompilierung funktioniert problemlos.

Ich verwende cakezum Erstellen meines Projekts und habe es verwendet, set_target_properties(clib PROPERTIES COMPILE_FLAGS "-m32" LINK_FLAGS "-m32")um einen 32-Bit-Build zu erzwingen.

Immer wenn ich versuche, dies zu erstellen, gibt der Compiler einen Fehler aus, weil ich es <iostream>in mein Hauptprogramm einbinde. Zuerst beschwerte er sich, dass er nicht finden konnte, <bits/c++config.h>was irgendwo in enthalten ist <iostream>.
Ich fand ein paar Dinge online, die mich dazu veranlassten, es g++-multilibauf meinem System zu installieren. Jetzt ist der vorherige Fehler weg, aber stattdessen erhalte ich den Fehler /usr/include/linux/errno.h:1:10: fatal error: asm/errno.h: No such file or directory, der ebenfalls seinen Ursprung in hat #include <iostream>.

Ich habe nachgeschaut, wo sich diese Datei befindet, und ich habe sie gefunden, /usr/include/x86_64-linux-gnu/asm/errno.haber (wie zuvor beim c++config.hOrdner x86_64scheint dieser in einer 32-Bit-Version nicht durchsucht zu werden (was irgendwie Sinn macht).
Ich habe sie auch in einem Ordner gefunden, /usr/include/linux/errno.hder mit dem vorherigen identisch ist, aber wie Sie sehen, befindet sie sich nicht im asmUnterordner.
Natürlich könnte ich sie manuell in diesen Ordner verschieben, aber ich habe das Gefühl, dass mit meinem Setup hier etwas generell nicht stimmt.

Was muss ich also sonst noch einrichten, damit ich meinen Code (mit einem #include <iostream>) als 32-Bit-ausführbare Datei kompilieren kann? Gibt es so etwas wie eine 32-Bit-Version der Standardbibliothek?

EDIT:
Ich verwende Linux Mint 18.3 mit g++ --versionof g++ (Ubuntu 7.3.0-27ubuntu1~18.04) 7.3.0undcmake v.3.10.2

Antwort1

Okay, ich habe herausgefunden, wo das Problem lag:
Als ich herausfand, dass ich verwenden musste, g++-multilibsuchte ich in meinem Paketmanager danach ( synapticin meinem Fall). Dieser listete eine Reihe von Versionen auf, also überprüfte ich, welche Version von g++ich installiert hatte, und installierte dann das entsprechende g++-multilib-Paket, das in meinem Fall das war g++-7-multilib.

Was jedoch nicht installiert wurde, war das gcc-multilibPaket, das in meinem Fall der Störenfried zu sein scheint. Nachdem ich dieses installiert hatte, funktionierte es wie erwartet.


Kurz gesagt: Wenn ich das g++-multilibPaket (ohne Version im Namen) von Anfang an installiert hätte, hätte ich dieses Problem nicht gehabt.

verwandte Informationen