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

构建GCC交叉编译器(从“Linux”到“Windows”),gcc,compiler-construction,cross-platform,Gcc,Compiler Construction,Cross Platform,我想构建“gcc交叉编译器”,在“Linux”环境下编译“c/c++”应用程序,但不针对“Windows”目标 到目前为止,我已经做到了: 安装了“”页上列出的用于构建GCC的必要工具和软件包 下载所需资源: “”,“”,“”,“”,“”,“”,“” 已创建此目录层次结构: “${HOME}/gcc/”-用于最终交叉编译器 “${HOME}/src/”-用于源 “${HOME}/src/build-binutils/i386-mingw32/”-用于将binutils构建到“i386-mingw

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

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

  • 安装了“”页上列出的用于构建GCC的必要工具和软件包

  • 下载所需资源:
    “”,“”,“”,“”,“”,“”,“”

  • 已创建此目录层次结构:
    “${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--禁用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”


  • 现在,当我尝试构建“c(仅限)交叉编译器”时:

    从那个错误消息中,我真的不知道现在该怎么办


    有人知道问题出在哪里吗?

    谢谢。

    我浏览了MinGW源代码,发现dllcrt2.o是基于mingwrt软件包构建的。我想你必须编译并安装它,而不仅仅是复制头?

    这其实没关系:按照现在的方式,你需要

  • 构建binutils
  • 安装头
  • 构建部分C编译器:足以创建对象文件,但不足以链接
  • 构建win32api和mingw运行时(包括缺少的
    dllcrt2.o
  • 构建完整的C编译器(以及其他前端,如C++、FORTRAN、艾达,不管你想要什么)
  • 您已经成功地执行了上面的步骤3;构建libgcc(这是一个GCC支持库)失败,但这意味着C编译器核心是functional(尽管它无法链接,但仍然可以创建有效的对象文件)。您可以通过查看GCC构建目录中的
    GCC/xgcc
    文件来检查这一点

    因此,你需要进入下一步,不要担心当前的失败


    (要实际安装部分C编译器,您应该使用
    -k
    选项运行
    make
    ,使其即使在遇到错误时也能发挥最佳效果。例如,使用
    make-k install

    可以使用MinGW-w64的预编译交叉编译器。 这允许从Linux编译本机32位和64位Windows二进制文件,在


    以防你不想花太多时间自己构建它。

    是的,是的。复制头只是许多步骤中的一步。在我的文章中的第五步之后,我应该这样做:-6.构建“c(仅)交叉编译器”-7.将刚刚编译过的二进制文件的位置添加到“PATH”环境变量。-8.构建“win32api”-9.构建“mingwrt”- 10。构建“C和C++交叉编译器”。但是现在我只需第六步,得到这个错误。嗯……我自己还没有玩弄MinGW。但是当我设置第一级交叉编译器时,我使用“没有标题”。在配置行告诉它不要依赖任何类型的C库或运行时作为目标。我不知道你在遵循哪种操作方法,也不知道如何使用MinGW,但也许你可以试一试。非常感谢你的评论:“你已经成功地执行了上面的第3步”。我想如果我遇到任何错误,我就无法进入下一步,但(幸运的是)我错了。下一步我成功地编译了win32api,但我在尝试编译mingwrt时遇到了一些错误-“线程化”有问题。因此我决定用以下参数编译gcc:--prefix=“${HOME}/gcc”-目标=I38 6MIW32——程序前缀=I38—MIW32——使语言= C,C++ +标题=“${HOL}/GCC/I38 6WIMW32/包含”——禁用NLS——禁用线程——禁用共享-禁用LBSSP。并且这工作了!!!我很抱歉以前的注释有一个小错误:问题是在“共享”选项中,而不是“线程”。选项。因此它在编译时也没有指定“-disable threads”。关于线程,如果安装了pthreads-win32库,还可以使用
    --enable libgomp
    (对于OpenMP)构建GCC。
    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>
    
    ${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