64位mingw环境下构建libiconv

64位mingw环境下构建libiconv

我正在尝试在我的 Windows PC 上组织一个小型 64 位 gnu 环境。我已经构建了64位mingw环境,并继续构建我接下来需要的库。

在构建 libiconv 时,我尝试遵循这个操作说明,这相当于通过--host向配置 cipt 提供参数来进行配置。但是,构建失败并出现以下错误:

c:/mingw_mine/bin/../lib/gcc/x86_64-w64-mingw32/4.9.2/../../../../x86_64-w64-min gw32/bin/ld.exe: i386输入文件“.libs/libiconv.res.o”的体系结构与 i386:x86-64 输出不兼容

什么地方出了错?

一些必要的细节:我使用预编译的 32 位 msys 作为 shell。它包括程序的数量makeinstallgcc。为了避免使用错误gcc,我首先向 PATH、C_INCLUDE_PATH 和 CPLUS_INCLUDE_PATH 添加了必要的路径,然后使用以下命令执行配置:

$ ../src/configure --prefix=/c/temp/gcc/dest --host=x86_64-w64-mingw32 --build=x86_64-w64-mingw32 CPPFLAGS="-Wall -I/c/mingw_mine/include “LDFLAGS =“-L / c / mingw_mine / lib”

据我所知,配置脚本正确检测到了我想要的编译器;总而言之,配置顺利完成。 i386 二进制文件从哪里来?即使配置检测到架构uname/bin/uname在 32 位 msys 中),如果显式定义主机,为什么会重要呢?

答案1

经过调查,我已经解决了这个问题。一步一步进行:

  1. 我得到了错误的二进制文件作为windres程序的输出。检查which给了我/bin/windres,即来自32位msys环境的一个。
  2. 我已经为64位mingw编译了bintools,所以/mingw/bin文件夹中确实有64位windres。然而,它并没有在构建过程中使用。
  3. 在检查配置过程如何进行后,我注意到像这样的行

检查 x86_64-w64-mingw32-windres.... 否

检查 Windres...windres

  1. 我创建了名为 x86_64-w64-mingw32-windres 的 msys 环境文件并将其放入 /mingw 文件夹中,其中包含以下内容:

    #!/bin/sh script="$0" basename="$(dirname $script)" $basename/windres "$@"

重新配置后,构建顺利进行。

相关内容