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

Pet*_*ike 7 compiler-construction gcc cross-platform

我想构建"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
    make
    make install

  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>
Run Code Online (Sandbox Code Playgroud)

它正在构建大约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
Run Code Online (Sandbox Code Playgroud)

从那个错误信息我真的不知道现在该做什么: - (((.


有谁知道问题出在哪里?
谢谢.

F'x*_*F'x 12

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

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

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

所以,你需要进入下一步,不要担心你目前的失败.

(要实现安装部分C编译器,您应该make使用该-k选项运行,以使其尽力而为,即使遇到错误.例如,使用make -k install.)