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

时间:2009-09-24 23:21:10

标签: gcc compiler-construction cross-platform

我想构建“gcc cross-compiler”来编译“Linux”环境中的“c / c ++”应用程序,但是用于“Windows”目标。

到目前为止我已经做到了这一点:

  1. 安装了必要的工具和软件包,用于构建“Prerequisites for 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 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”


  6. 现在,当我尝试构建“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
    

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


    有谁知道问题在哪里?
    感谢。

3 个答案:

答案 0 :(得分:11)

实际上没问题:事情的进展,你需要

  1. build binutils
  2. 安装标题
  3. 构建一个部分C编译器:足以创建目标文件,但不足以链接
  4. 构建win32api和mingw运行时(包括您缺少的dllcrt2.o
  5. 构建一个完整的C编译器(和其他前端,如C ++,Fortran,Ada,等等,如果你想要的话)
  6. 您已成功执行上述第3步;它无法构建libgcc(这是一个GCC支持库),但这意味着C编译器核心是功能的(尽管它无法链接,它仍然可以创建有效的目标文件)。您可以通过查看GCC构建目录中的gcc/xgcc文件来检查它。

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

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

答案 1 :(得分:1)

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

万一你不想花很多时间自己去构建它。

答案 2 :(得分:0)

我通过MinGW来源,发现dllcrt2.o是mingwrt包构建的东西。我假设您必须编译并安装它,而不仅仅是复制标题?