无法在 64 位系统上构建 32 位二进制文​​件

Can't build 32-bit binaries on a 64 bit system

简介

虽然我能够为我的 64 位 windows 系统构建二进制文件,但我无法找到生成 32 位二进制文​​件的方法,尽管我已经尝试了很多方法仍然有很多错误。 具体来说 我正在尝试的是构建我正在尝试维护的 PDCurses-3.9 under the wincon folder for 32-bit Systems (dedicated for use in this unicurses 库).

但到目前为止我尝试的只是错误

ifeq ($(DEBUG),Y)
    CFLAGS  = -g -Wall -DPDCDEBUG
    LDFLAGS = -g
else
    CFLAGS  = -m32 -O2 -Wall # <-- 
    LDFLAGS = -m32           # <--
endif
...
windres -i ../common/pdcurses.rc pdcurses.o
gcc -Wl,--out-implib,pdcurses.a -shared -o pdcurses.dll addch.o addchstr.o addstr.o attr.o beep.o bkgd.o border.o clear.o color.o delch.o deleteln.o getch.o getstr.o getyx.o inch.o inchstr.o initscr.o inopts.o insch.o insstr.o instr.o kernel.o keyname.o mouse.o move.o outopts.o overlay.o pad.o panel.o printw.o refresh.o scanw.o scr_dump.o scroll.o slk.o termattr.o touch.o util.o window.o debug.o pdcclip.o pdcdisp.o pdcgetsc.o pdckbd.o pdcscrn.o pdcsetsc.o pdcutil.o pdcurses.o
C:/msys64/mingw64/bin/../lib/gcc/x86_64-w64-mingw32/10.3.0/../../../../x86_64-w64-mingw32/bin/ld.exe: cannot export COLORS: symbol not found
    ... 
C:/msys64/mingw64/bin/../lib/gcc/x86_64-w64-mingw32/10.3.0/../../../../x86_64-w64-mingw32/bin/ld.exe: i386 architecture of input file `addch.o' is incompatible with i386:x86-64 output
    ...
C:/msys64/mingw64/bin/../lib/gcc/x86_64-w64-mingw32/10.3.0/../../../../x86_64-w64-mingw32/bin/ld.exe: color.o:color.c:(.text+0x670): undefined reference to `_getenv'
    ... 
C:/msys64/mingw64/bin/../lib/gcc/x86_64-w64-mingw32/10.3.0/../../../../x86_64-w64-mingw32/bin/ld.exe: pdcutil.o:pdcutil.c:(.text+0x4a): undefined reference to `__imp__GetTickCount@0'
collect2.exe: error: ld returned 1 exit status
make: *** [pdcurses.dll] Error 1

^ ... = 其中很多

系统信息

Windows 10 专业版 64 位 |英特尔(R) 酷睿(TM) i7-6700 CPU

> gcc --version
gcc (Rev5, Built by MSYS2 project) 10.3.0
Copyright (C) 2020 Free Software Foundation, Inc.
This is free software; see the source for copying conditions.  There is NO
warranty; not even for MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.
make --version
GNU Make 3.81
Copyright (C) 2006  Free Software Foundation, Inc.
This is free software; see the source for copying conditions.
There is NO warranty; not even for MERCHANTABILITY or FITNESS FOR A
PARTICULAR PURPOSE.

This program built for i386-pc-mingw32

结尾

一般来说,我已经尝试过更改 makefile,但是 我对这些东西有点菜鸟,所以我没有成功 [...] 有什么想法吗?提前致谢

我不确定 -m32 是否真的能够在 Windows 上切换目标。如果它有任何工作的机会,你实际上需要一个针对 32 位 on your systemx86_64-w64-mingw32 的编译器,不是吗,你可能想要 i686-w64-mingw32 并且可能在mingw32 在您的 msys 文件夹中?

如果构建脚本在调用 gcc.exe 时没有任何类型的目标前缀,那么正确的编译器需要位于您的 %path% 中。