我正在尝试在我的 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。它包括程序的数量make
、install
和gcc
。为了避免使用错误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
经过调查,我已经解决了这个问题。一步一步进行:
- 我得到了错误的二进制文件作为
windres
程序的输出。检查which
给了我/bin/windres
,即来自32位msys环境的一个。 - 我已经为64位mingw编译了bintools,所以
/mingw/bin
文件夹中确实有64位windres。然而,它并没有在构建过程中使用。 - 在检查配置过程如何进行后,我注意到像这样的行
检查 x86_64-w64-mingw32-windres.... 否
检查 Windres...windres
我创建了名为 x86_64-w64-mingw32-windres 的 msys 环境文件并将其放入 /mingw 文件夹中,其中包含以下内容:
#!/bin/sh script="$0" basename="$(dirname $script)" $basename/windres "$@"
重新配置后,构建顺利进行。