跨平台Mingw编译失败,出现未知的伪操作符。

3
我正在尝试在Redhat集群(x86_64主机)上设置交叉mingw。我没有root访问权限,可用的mingw二进制文件不起作用(glibc版本错误等)。我正在按照这个教程进行操作:

http://sourceforge.net/apps/trac/mingw-w64/wiki/Cross%20Win32%20and%20Win64%20compiler

我正在从以下源代码tarball编译:
binutils-2.20.1.tar.bz2
gcc-4.7.0.tar.bz2
gmp-5.0.4.tar.bz2
mingw-w64-v2.0.2.tar.gz
mpc-0.9.tar.gz
mpfr-2.4.2.tar.bz2

很不幸,在处理了一些问题后,我在教程的"构建crt(Mingw-w64本身)"步骤中卡住了。我正在使用sysroot并且有正确的$PATH。经过一段时间和一些完成的make命令后,Make会输出以下错误:
x86_64-w64-mingw32-ranlib lib64/libws2_32.a
x86_64-w64-mingw32-gcc -DHAVE_CONFIG_H -I. -I/home/zaluski/work/mingw-builds/mingw-w64-v2.0.2/mingw-w64-crt  -D_CRTBLD -I/var/fpwork/mingw/x86_64-w64-mingw32/include   -pipe -std=gnu99 -Wall -Wextra -Wformat -Wstrict-aliasing -Wshadow -Wpacked -Winline -Wimplicit-function-declaration -Wmissing-noreturn -Wmissing-prototypes -g -O2 -m64 -I/home/zaluski/work/mingw-builds/mingw-w64-v2.0.2/mingw-w64-crt/include -D_SYSCRT=1 -DCRTDLL=1 -c /home/zaluski/work/mingw-builds/mingw-w64-v2.0.2/mingw-w64-crt/crt/crtexe.c -o lib64/crt1.o -D__CRTDLL__ -U__MSVCRT__
{standard input}: Assembler messages:
{standard input}:713: Error: unknown pseudo-op: `.seh_handlerdata'
{standard input}:762: Error: unknown pseudo-op: `.seh_handlerdata'
make[3]: *** [lib64/crt1.o] Error 1

我在谷歌上找到的建议是检查是否使用了正确的编译器。正如我所说,我的$PATH很好(/usr/lib64/qt-3.3/bin:/usr/kerberos/bin:/usr/local/bin:/bin:/usr/bin:/usr/X11R6/bin:/opt/bin:/usr/atria/bin:/opt/UsageModel:/home/zaluski/bin:/var/fpwork/mingw/bin),并且在日志中有x86_64-w64-mingw32-gcc。

这些问题很难解决,至少根据我的经验是这样的。我建议你检查一下 gasas gcc 使用的版本,因为可能是本地版本。 - dsign
GNU C(GCC)版本4.7.0(x86_64-w64-mingw32) 由GNU C版本4.1.2 20080704(Red Hat 4.1.2-46)编译,GMP版本5.0.4,MPFR版本2.4.2,MPC版本0.9。 - Marcin Zaluski
2个回答

1

可能正在使用本地汇编器而不是交叉编译的汇编器。请检查$PATH中是否有*x86_64-w64-mingw32-as*。

我建议使用*x86_64-w64-mingw32-gcc -S*标志运行失败的命令,以便自己生成汇编代码,然后使用*x86_64-w64-mingw32-as*汇编器将生成的汇编与之前的进行比较,看是否出现类似的错误。


另外,如果传递 -v 参数以获取详细输出,可能会提供一些线索,以确定是否调用了错误的 as - Michael Burr
谢谢回复。不幸的是,这不是线索(目前在crt1.o中有汇编语言): $ x86_64-w64-mingw32-as -v lib64/crt1.o GNU汇编器版本2.20.1(x86_64-w64-mingw32),使用BFD版本(GNU Binutils)2.20.1.20100303 lib64/crt1.o:汇编器消息: lib64/crt1.o:713:错误:未知伪操作:“.seh_handlerdata” lib64/crt1.o:762:错误:未知伪操作:“.seh_handlerdata” - Marcin Zaluski

0
好的,我成功地进行了安装。我发现有一个SEH宏定义,但似乎不应该有,因此条件代码失败了。快速的修补解决了这个问题:
sed 's/#ifdef __SEH__/#ifdef __SEHWORKAROUND__/' -i mingw-builds/mingw-w64-v2.0.2/mingw-w64-crt/crt/crtexe.c

在这个解决方案之后,我成功地编译了mingw-crt,并继续进行下一步 - “完成GCC”。

网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接