kompilieren von 32-bit-code aus cygwin64
Ich installiert Cygwin64 auf einem win7-64 mit gcc dev-tools und ich habe gerade festgestellt, dass es produziert 64bit binaries. (Naja, nicht so überraschend :o) gibt es einen Mittelwert, um es zu produzieren einige 32-bit-Binärdateien?
Ich bin kompilieren Sie das schockiert tool für windows, kompiliert in 64bit, es funktioniert, aber ich bin versucht zu machen, eine andere version eignet sich für einen XP-32.
Den configure
Skript scheint nicht zu unterstützen -b 32
switch (dass muss ich gesehen haben ming64 von dieser thread, und wenn ich versuche, geben Sie die -m32
Schalter in CFLAGS
für configure
es nicht:
$ CFLAGS=-m32 ./configure
checking which defines needed for makedepend...
checking for a BSD-compatible install... /usr/bin/install -c
checking for gcc... gcc
checking whether the C compiler works... no
configure: error: in `/cygdrive/c/dev/tools/nettools/socat/socat-2.0.0-b8':
configure: error: C compiler cannot create executables
See `config.log' for more details
Wäre die option, auch die Installation Cygwin32, oder kann ich kompilieren von 32-bit-code mit einer anderen Einstellung oder zusätzliche cygwin-Paket?
Edit:
Ich habe festgestellt, dass meine cygwin64/gcc nicht kompilieren eine einfache hello.c
Programm in 32bit:
#include <stdio.h>
int main (int argc, char *argv[]){
printf("Hello, world!\n");
return 0;
}
mit einem gcc -o hello.exe hello.c
es funktioniert einwandfrei, aber gcc -o hello.exe hello.c -m32
spuckt
/usr/lib/gcc/x86_64-pc-cygwin/4.9.2/../../../../x86_64-pc-cygwin/bin/ld: skipping incompatible /usr/lib/gcc/x86_64-pc-cygwin/4.9.2//libgcc_s.dll.a when searching for -lgcc_s
/usr/lib/gcc/x86_64-pc-cygwin/4.9.2/../../../../x86_64-pc-cygwin/bin/ld: skipping incompatible /usr/lib/gcc/x86_64-pc-cygwin/4.9.2/libgcc_s.dll.a when searching for -lgcc_s
/usr/lib/gcc/x86_64-pc-cygwin/4.9.2/../../../../x86_64-pc-cygwin/bin/ld: skipping incompatible /usr/lib/gcc/x86_64-pc-cygwin/4.9.2//libgcc_s.dll.a when searching for -lgcc_s
/usr/lib/gcc/x86_64-pc-cygwin/4.9.2/../../../../x86_64-pc-cygwin/bin/ld: skipping incompatible /usr/lib/gcc/x86_64-pc-cygwin/4.9.2/libgcc_s.dll.a when searching for -lgcc_s
/usr/lib/gcc/x86_64-pc-cygwin/4.9.2/../../../../x86_64-pc-cygwin/bin/ld: cannot find -lgcc_s
/usr/lib/gcc/x86_64-pc-cygwin/4.9.2/../../../../x86_64-pc-cygwin/bin/ld: skipping incompatible /usr/lib/gcc/x86_64-pc-cygwin/4.9.2//libgcc.a when searching for -lgcc
/usr/lib/gcc/x86_64-pc-cygwin/4.9.2/../../../../x86_64-pc-cygwin/bin/ld: skipping incompatible /usr/lib/gcc/x86_64-pc-cygwin/4.9.2//libgcc.a when searching for -lgcc
/usr/lib/gcc/x86_64-pc-cygwin/4.9.2/../../../../x86_64-pc-cygwin/bin/ld: skipping incompatible /usr/lib/gcc/x86_64-pc-cygwin/4.9.2/libgcc.a when searching for -lgcc
/usr/lib/gcc/x86_64-pc-cygwin/4.9.2/../../../../x86_64-pc-cygwin/bin/ld: skipping incompatible /usr/lib/gcc/x86_64-pc-cygwin/4.9.2/libgcc.a when searching for -lgcc
/usr/lib/gcc/x86_64-pc-cygwin/4.9.2/../../../../x86_64-pc-cygwin/bin/ld: skipping incompatible /usr/lib/gcc/x86_64-pc-cygwin/4.9.2//libgcc.a when searching for -lgcc
/usr/lib/gcc/x86_64-pc-cygwin/4.9.2/../../../../x86_64-pc-cygwin/bin/ld: skipping incompatible /usr/lib/gcc/x86_64-pc-cygwin/4.9.2/libgcc.a when searching for -lgcc
/usr/lib/gcc/x86_64-pc-cygwin/4.9.2/../../../../x86_64-pc-cygwin/bin/ld: cannot find -lgcc
/usr/lib/gcc/x86_64-pc-cygwin/4.9.2/../../../../x86_64-pc-cygwin/bin/ld: skipping incompatible /usr/lib/gcc/x86_64-pc-cygwin/4.9.2/../../../libcygwin.a when searching for -lcygwin
/usr/lib/gcc/x86_64-pc-cygwin/4.9.2/../../../../x86_64-pc-cygwin/bin/ld: skipping incompatible /usr/lib/gcc/x86_64-pc-cygwin/4.9.2/../../../libcygwin.a when searching for -lcygwin
/usr/lib/gcc/x86_64-pc-cygwin/4.9.2/../../../../x86_64-pc-cygwin/bin/ld: skipping incompatible /usr/lib/gcc/x86_64-pc-cygwin/4.9.2/../../../libcygwin.a when searching for -lcygwin
/usr/lib/gcc/x86_64-pc-cygwin/4.9.2/../../../../x86_64-pc-cygwin/bin/ld: cannot find -lcygwin
/usr/lib/gcc/x86_64-pc-cygwin/4.9.2/../../../../x86_64-pc-cygwin/bin/ld: cannot find -ladvapi32
/usr/lib/gcc/x86_64-pc-cygwin/4.9.2/../../../../x86_64-pc-cygwin/bin/ld: cannot find -lshell32
/usr/lib/gcc/x86_64-pc-cygwin/4.9.2/../../../../x86_64-pc-cygwin/bin/ld: cannot find -luser32
/usr/lib/gcc/x86_64-pc-cygwin/4.9.2/../../../../x86_64-pc-cygwin/bin/ld: cannot find -lkernel32
/usr/lib/gcc/x86_64-pc-cygwin/4.9.2/../../../../x86_64-pc-cygwin/bin/ld: skipping incompatible /usr/lib/gcc/x86_64-pc-cygwin/4.9.2//libgcc_s.dll.a when searching for -lgcc_s
/usr/lib/gcc/x86_64-pc-cygwin/4.9.2/../../../../x86_64-pc-cygwin/bin/ld: skipping incompatible /usr/lib/gcc/x86_64-pc-cygwin/4.9.2/libgcc_s.dll.a when searching for -lgcc_s
/usr/lib/gcc/x86_64-pc-cygwin/4.9.2/../../../../x86_64-pc-cygwin/bin/ld: skipping incompatible /usr/lib/gcc/x86_64-pc-cygwin/4.9.2//libgcc_s.dll.a when searching for -lgcc_s
/usr/lib/gcc/x86_64-pc-cygwin/4.9.2/../../../../x86_64-pc-cygwin/bin/ld: skipping incompatible /usr/lib/gcc/x86_64-pc-cygwin/4.9.2/libgcc_s.dll.a when searching for -lgcc_s
/usr/lib/gcc/x86_64-pc-cygwin/4.9.2/../../../../x86_64-pc-cygwin/bin/ld: cannot find -lgcc_s
/usr/lib/gcc/x86_64-pc-cygwin/4.9.2/../../../../x86_64-pc-cygwin/bin/ld: skipping incompatible /usr/lib/gcc/x86_64-pc-cygwin/4.9.2//libgcc.a when searching for -lgcc
/usr/lib/gcc/x86_64-pc-cygwin/4.9.2/../../../../x86_64-pc-cygwin/bin/ld: skipping incompatible /usr/lib/gcc/x86_64-pc-cygwin/4.9.2//libgcc.a when searching for -lgcc
/usr/lib/gcc/x86_64-pc-cygwin/4.9.2/../../../../x86_64-pc-cygwin/bin/ld: skipping incompatible /usr/lib/gcc/x86_64-pc-cygwin/4.9.2/libgcc.a when searching for -lgcc
/usr/lib/gcc/x86_64-pc-cygwin/4.9.2/../../../../x86_64-pc-cygwin/bin/ld: skipping incompatible /usr/lib/gcc/x86_64-pc-cygwin/4.9.2/libgcc.a when searching for -lgcc
/usr/lib/gcc/x86_64-pc-cygwin/4.9.2/../../../../x86_64-pc-cygwin/bin/ld: skipping incompatible /usr/lib/gcc/x86_64-pc-cygwin/4.9.2//libgcc.a when searching for -lgcc
/usr/lib/gcc/x86_64-pc-cygwin/4.9.2/../../../../x86_64-pc-cygwin/bin/ld: skipping incompatible /usr/lib/gcc/x86_64-pc-cygwin/4.9.2/libgcc.a when searching for -lgcc
/usr/lib/gcc/x86_64-pc-cygwin/4.9.2/../../../../x86_64-pc-cygwin/bin/ld: cannot find -lgcc
collect2: error: ld returned 1 exit status
- Sie könnte auch überprüfen, stackoverflow.com/questions/54206577/...
Du musst angemeldet sein, um einen Kommentar abzugeben.
konfigurieren ist Teil der autotools, und nicht relevant für die ursprüngliche Frage. Es gibt zwei 32-bit-runtime-Umgebungen können Sie ein C-Programm für. CYGWIN-32 und MINGW32. Ich werde nicht ins Detail gehen, auf die Unterschiede, sondern eine cygwin32 Programm posix/Linux-kompatibel (meistens), deshalb ziehe ich es vor, die Umgebung. Hier sind die details auf, wie man eine cygwin32 Anwendung auf einem cygwin64 installieren:
1)installieren cygwin32-gcc Paket und die cygwin32-w32api-Laufzeit Paket in cygwin64 setup, wenn Sie dies nicht bereits getan haben. dies installiert einen c-compiler i686-pc-cygwin-gcc und die Laufzeit cygwin1.dll das müssen Sie testen Sie Ihr Programm (oder können Sie es testen, in einem cygwin32 installieren).
2) vorausgesetzt, Ihr Hallo.c oben genannten Programm erstellt werden, wählen Sie die C # compiler und die Laufzeit, aus der cygwin64 shell mit export CC, oder führen Sie einfach den C-compiler als Standard-make Ausgabe zeigt unten "machen Hallo":
3) Sie werden feststellen, dass nichts wirklich geschieht, weil Cygwin-runtime für 32 bit nicht in den Weg. So fügen Sie dem Pfad, und es wird korrekt ausgeführt,
4) Lehnen Sie sich zurück, trinkt noch einen Schluck Kaffee, und freuen uns
Cygwin-Pakete mit cygwin-zum-cygwin cross-toolchains. Es gibt
cygwin32-*
- Pakete für das Gebäude 32-bit, 64-bit-Cygwin -cygwin64-*
- Pakete für die Erstellung von 64-bit von 32-bit-Cygwin.Habe ich noch nie verwendet, aber ich nehme an, Sie arbeiten ziemlich viel, wie jeder cross-toolchain, so sollten Sie von pass die richtige
--host
und--build
Argumente, um Ihre./configure
Schritt../configure
Linie?i686-w64-mingw32-*.exe
(wo*
wäre, z.B.gcc
) direkt, und es wird fröhlich kompilieren Win32 in ein Cygwin64 Umgebung. Voraussetzung ist natürlich, dass diecygwin32-*
Pakete installiert.Hinzufügen -m32 an den compiler macht es nicht wählen Sie die richtigen Bibliotheken. Sie sollten prüfen, ob Sie die i686-pc-cygwin-gcc-compiler installiert. Zu verwenden, der compiler, den Sie haben, so etwas zu tun:
./configure --target=i686-pc-cygwin
Hoffe es hilft 🙂