首页 文章

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

提问于
浏览
7

我想构建“gcc交叉编译器”来编译“Linux”环境中的“c / c”应用程序,但是用于“Windows”目标 .

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

  • 安装了用于构建“Prerequisites for GCC”页面上列出的GCC所需的工具和软件包 .

  • 下载所需的来源:
    gcc-core-4.4.1 ", " gcc-g++-4.4.1 ", " binutils-2.19.1 ", " w32api-3.13-mingw32 ", " mingwrt-3.16-mingw32

  • 创建了此目录层次结构:
    "$
    /gcc/" - 用于最终的交叉编译器
    "$
    /src/" - 来源
    "$
    /src/build-binutils/i386-mingw32/" - 用于将binutils构建为"i386-mingw32" target
    "$
    /src/build-gcc/i386-mingw32/" - 用于将gcc构建为"i386-mingw32" target

  • Builded binutils包:

cd "$/src/build-binutils/i386-mingw32/"
../../binutils-2.19.1/configure --prefix = "$
/gcc" --target = i386-mingw32 --disable-nls
使
make install

  • 将“w32api”和“mingwrt”标头复制到安装目录:

cp -R "$/src/w32api-3.13-mingw32/include" "$/gcc/i386-mingw32"
cp -R "$
/src/mingwrt-3.16-mingw32/include" "$/gcc/i386-mingw32"

现在,当我尝试构建"c (only) cross-compiler"时:

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 回答

  • 1

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

    以防您不想花费大量时间自己构建它 .

  • 0

    我浏览了MinGW源代码,发现dllcrt2.o是mingwrt包构建的 . 我假设您必须编译并安装它,而不仅仅是复制 Headers ?

  • 11

    这实际上没问题:你需要做的事情

    • build binutils

    • 安装标头

    • 构建一个部分C编译器:足以创建目标文件,但不足以链接

    • 构建win32api和mingw运行时(包括你缺少的 dllcrt2.o

    • 构建一个完整的C编译器(和其他前端,如C,Fortran,Ada,等等,如果你想要的话)

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

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

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

相关问题