为啥我的 (x86->64) windows 交叉编译器的编译失败?

Posted

技术标签:

【中文标题】为啥我的 (x86->64) windows 交叉编译器的编译失败?【英文标题】:Why is the compilation of my (x86->64) windows cross compiler failing?为什么我的 (x86->64) windows 交叉编译器的编译失败? 【发布时间】:2011-07-07 00:42:12 【问题描述】:

我正在尝试在我的 windows 系统上构建一个交叉编译器 (x86->64),目标是 windows 64,但是我的软件目前依赖于开源库,这些库也有开源依赖项没有可用于编译的预构建二进制文件。这意味着如果我想要 64 位版本,我需要编译它们。

我已经安装了 MSYS 和 mingw,我还在将 mingw-w64 添加到组合中,以便我最终可以编译 64 位格式的库以与我的软件一起使用。我正在尽我所能using these instructions 遵循这些步骤,并且按照该页面上列出的顺序,我目前正在执行标题为“构建 GCC 核心交叉编译器”的步骤,但是当我尝试使用以下行进行编译时:

$ ../gcc-4.6.1/configure --target=x86_64-w64-mingw32 --enable-targets=all && make -j 6 all-gcc && make -j 6 install-gcc

我收到了output pasted here。我应该注意,我当然剪断了以前执行的命令,最后一个命令是在显示所有错误之前列出的最后一个命令。另外,我不知道这是否是由于 '-j 6' 参数引起的所有错误的原因,但在它之前的一切至少看起来是成功的。

出了什么问题,我该如何解决?

哦,期待一个潜在的建议;不,我不能只切换到 cygwin。

编辑:分别执行here's the output of the configure command、the output produced by make all-gcc (no -j argument) 和config.log 之后就可以了。请注意,我没有事先运行make clean,这可能会解释不同的结局,我没有这样做是为了节省时间来编写此更新,但我想我只是制作一个不同的编译文件夹并重新 -干净地执行它,希望在我等待响应时看到与以前相同的错误。

编辑 2make all-gcc 再次按预期失败,这次the output 应该能帮助更多我希望。

非常感谢您的帮助。

【问题讨论】:

收到错误后,再次运行 make 不带 -j 选项以查看究竟是哪个命令生成它。查看错误,似乎汇编器在抱怨它无法识别的指令,因此您的工具链可能还没有准备好发出 x64 代码。 我已按照您的建议重新开始编译过程。你说的有点道理..但我觉得这很奇怪,因为在我看来,这一步的全部目的是编译能够完全做到这一点的编译器.. 【参考方案1】:

您的config.log 表明构建过程将使用 x86_64-w64-mingw32/bin 中的二进制文件来处理 ar 等内容...这些仅供内部编译器使用,它们都应该在您的/mingw/bin 目录。我强烈建议在 mingw-w64-public 邮件列表上寻求帮助。

【讨论】:

我不知道你说的第一件事是什么,但我刚刚注册了邮件列表并发送了一封电子邮件。感谢您的建议!

以上是关于为啥我的 (x86->64) windows 交叉编译器的编译失败?的主要内容,如果未能解决你的问题,请参考以下文章

为啥我的 C++/QT 应用程序在 Linux x86_64 上的 nanosleep() 中崩溃?

怎么查看x64 x86

为啥 x86-64 Linux 系统调用使用 6 个寄存器集?

为啥 linux multiarch 使用 x86_64-linux-gnu 而不是 lib64?

为啥某些 Linux x86_64 系统调用需要存根?

为啥 32 位寄存器上的 x86-64 指令会将完整 64 位寄存器的上部归零?