构建GCC交叉编译器(从“Linux”到“Windows”)

问题描述 投票:0回答:3

我想构建“gcc交叉编译器”来在“Linux”环境下编译“c/c++”应用程序,但针对“Windows”目标。

到目前为止我已经做到了:

  1. 安装了“GCC 的先决条件”页面上列出的构建 GCC 所需的工具和软件包。

  2. 下载所需资源:
    gcc-core-4.4.1”、“gcc-g++-4.4.1”、“binutils-2.19.1”、“w32api-3.13-mingw32”、“mingwrt-3.16-” mingw32

  3. 创建了此目录层次结构:
    “${HOME}/gcc/” - 用于最终交叉编译器
    “${HOME}/src/” - 用于源
    "${HOME}/src/build-binutils/i386-mingw32/" - 用于将 binutils 构建为“i386-mingw32”目标
    "${HOME}/src/build-gcc/i386-mingw32/" - 用于将 gcc 构建为“i386-mingw32”目标

  4. 构建的 binutils 包:

    cd“${HOME}/src/build-binutils/i386-mingw32/”
    ../../binutils-2.19.1/configure --prefix="${HOME}/gcc" --target=i386-mingw32 --disable-nls
    制作
    进行安装

  5. 将“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"


现在,当我尝试构建“c(仅)交叉编译器”时:
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

从该错误消息中我真的不知道现在该怎么办:-((( .


有谁知道问题出在哪里吗?
gcc cross-platform cross-compiling
3个回答
12
投票

实际上没问题:按照事情的发展方向,你需要

  1. 构建 binutils
  2. 安装标头
  3. 构建部分 C 编译器:足以创建目标文件,但不足以链接
  4. 构建 win32api 和 mingw 运行时(其中包括你缺少的
    dllcrt2.o
  5. 构建一个完整的 C 编译器(以及其他前端,例如 C++、Fortran、Ada,等等,如果你需要的话)

您已成功执行上述步骤3;它无法构建 libgcc(这是一个 GCC 支持库),但这意味着 C 编译器核心可以正常工作(尽管它无法链接,但它仍然可以创建有效的目标文件)。您可以通过查看 GCC 构建目录中的

gcc/xgcc
文件来进行检查。

所以,你需要进行下一步,而不是担心当前的失败。

(要实际安装部分 C 编译器,您应该使用

make
选项运行
-k
,以使其做到最好,即使遇到错误也是如此。例如,使用
make -k install
。)


1
投票

有MinGW-w64的预编译交叉编译器可用。 这允许从 Linux 编译本机 32 位和 64 位 Windows 二进制文件,两分钟的教程位于 http://www.blogcompiler.com/2010/07/11/compile-for-windows-on-linux/

以防万一您不想花费大量时间尝试自己构建它。


0
投票

我搜索了 MinGW 源代码,发现 dllcrt2.o 是基于 mingwrt 包构建的东西。我假设您必须编译并安装它,而不仅仅是复制标头?

© www.soinside.com 2019 - 2024. All rights reserved.