我想构建“gcc交叉编译器”来在“Linux”环境下编译“c/c++”应用程序,但针对“Windows”目标。
到目前为止我已经做到了:
安装了“GCC 的先决条件”页面上列出的构建 GCC 所需的工具和软件包。
下载所需资源:
“gcc-core-4.4.1”、“gcc-g++-4.4.1”、“binutils-2.19.1”、“w32api-3.13-mingw32”、“mingwrt-3.16-” mingw32”
创建了此目录层次结构:
“${HOME}/gcc/” - 用于最终交叉编译器
“${HOME}/src/” - 用于源
"${HOME}/src/build-binutils/i386-mingw32/" - 用于将 binutils 构建为“i386-mingw32”目标
"${HOME}/src/build-gcc/i386-mingw32/" - 用于将 gcc 构建为“i386-mingw32”目标
构建的 binutils 包:
cd“${HOME}/src/build-binutils/i386-mingw32/”
../../binutils-2.19.1/configure --prefix="${HOME}/gcc" --target=i386-mingw32 --disable-nls
制作
进行安装
将“w32api”和“mingwrt”标头复制到安装目录:
cp -R“${HOME}/src/w32api-3.13-mingw32/include”“${HOME}/gcc/i386-mingw32”
cp -R "${HOME}/src/mingwrt-3.16-mingw32/include" "${HOME}/gcc/i386-mingw32"
cd "${HOME}/src/build-gcc/i386-mingw32/"
../../gcc-4.4.1/configure --prefix="${HOME}/gcc" --target=i386-mingw32 --enable-languages=c --with-headers="${HOME}/gcc/i386-mingw32/include" --disable-nls
make<br>
它构建了大约 4 分钟的东西,然后给了我这些错误:
${HOME}/gcc/i386-mingw32/bin/ld: dllcrt2.o: No such file: No such file or directory
collect2: ld returned 1 exit status
make[2]: *** [libgcc_s.dll] Error 1
make[2]: Leaving directory `${HOME}/src/build-gcc/i386-mingw32/i386-mingw32/libgcc'
make[1]: *** [all-target-libgcc] Error 2
make[1]: Leaving directory `${HOME}/src/build-gcc/i386-mingw32'
make: *** [all] Error 2
从该错误消息中我真的不知道现在该怎么办:-((( .
实际上没问题:按照事情的发展方向,你需要
dllcrt2.o
)您已成功执行上述步骤3;它无法构建 libgcc(这是一个 GCC 支持库),但这意味着 C 编译器核心可以正常工作(尽管它无法链接,但它仍然可以创建有效的目标文件)。您可以通过查看 GCC 构建目录中的
gcc/xgcc
文件来进行检查。
所以,你需要进行下一步,而不是担心当前的失败。
(要实际安装部分 C 编译器,您应该使用
make
选项运行 -k
,以使其做到最好,即使遇到错误也是如此。例如,使用 make -k install
。)
有MinGW-w64的预编译交叉编译器可用。 这允许从 Linux 编译本机 32 位和 64 位 Windows 二进制文件,两分钟的教程位于 http://www.blogcompiler.com/2010/07/11/compile-for-windows-on-linux/
以防万一您不想花费大量时间尝试自己构建它。
我搜索了 MinGW 源代码,发现 dllcrt2.o 是基于 mingwrt 包构建的东西。我假设您必须编译并安装它,而不仅仅是复制标头?