构建 GCC 交叉编译器(从“Linux"到“Windows") [英] Building GCC cross compiler (from "Linux" to "Windows")
问题描述
我想构建gcc 交叉编译器"以在Linux"环境下编译c/c++"应用程序,但用于Windows"目标.
I want to build "gcc cross-compiler" to compile "c/c++" applications on "Linux" environment but for "Windows" target.
到目前为止我已经做到了:
I have made this so far:
下载所需资源:
"gcc-core-4.4.1", "gcc-g++-4.4.1", "binutils-2.19.1", "w32api-3.13-mingw32", "mingwrt-3.16-mingw32"
Downloaded required sources:
"gcc-core-4.4.1", "gcc-g++-4.4.1", "binutils-2.19.1", "w32api-3.13-mingw32", "mingwrt-3.16-mingw32"
创建了这个目录层次结构:
"${HOME}/gcc/" - 用于最终的交叉编译器
"${HOME}/src/" - 用于来源
"${HOME}/src/build-binutils/i386-mingw32/" - 用于将 binutils 构建到 "i386-mingw32" 目标
"${HOME}/src/build-gcc/i386-mingw32/" - 用于将 gcc 构建到 "i386-mingw32" 目标
Created this directory hierarchy:
"${HOME}/gcc/" - for final cross-compiler
"${HOME}/src/" - for sources
"${HOME}/src/build-binutils/i386-mingw32/" - for building binutils to "i386-mingw32" target
"${HOME}/src/build-gcc/i386-mingw32/" - for building gcc to "i386-mingw32" target
构建 binutils 包:
Builded binutils package:
cd "${HOME}/src/build-binutils/i386-mingw32/"
../../binutils-2.19.1/configure --prefix="${HOME}/gcc" --target=i386-mingw32 --disable-nls
制作
进行安装
cd "${HOME}/src/build-binutils/i386-mingw32/"
../../binutils-2.19.1/configure --prefix="${HOME}/gcc" --target=i386-mingw32 --disable-nls
make
make install
将w32api"和mingwrt"标头复制到安装目录:
Copied "w32api" and "mingwrt" headers to the install directory:
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"
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(仅)交叉编译器"时:
And now when I am trying to build the "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 分钟的东西,然后给了我这些错误:
it was building something about 4 minutes and then gives me these errors:
${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
从那条错误消息中,我真的不知道现在该怎么办 :-((( .
From that error message I really don't know what to do now :-((( .
有谁知道问题出在哪里?
谢谢.
Does anybody know where is the problem?
Thanks.
推荐答案
其实没关系:事情的发展,你需要
That's actually OK: the way things go, you need to
- 构建 binutils
- 安装标头
- 构建一个部分 C 编译器:足以创建目标文件,但不足以链接
- 构建 win32api 和 mingw 运行时(包括您丢失的
dllcrt2.o
) - 构建一个完整的 C 编译器(以及其他前端,如 C++、Fortran、Ada 等,如果需要的话)
您已成功执行上述第 3 步;它无法构建 libgcc(这是一个 GCC 支持库),但这意味着 C 编译器核心是正常的(虽然它无法链接,但它仍然可以创建有效的目标文件).您可以通过查看 GCC 构建目录中的 gcc/xgcc
文件来检查.
You have successful performed step 3 above; it fails building libgcc (which is a GCC support library), but that means the C compiler core is functionnal (although it won't be able to link, it can still create valid object files). You can check that by looking at the gcc/xgcc
file in your GCC build directory.
所以,你需要进行下一步,不要担心你当前的失败.
So, you need to go to the next step, not worrying about your current failure.
(要实际安装部分 C 编译器,您应该运行带有 -k
选项的 make
以使其发挥最佳性能,即使遇到错误也是如此.例如,使用 make -k install
.)
(To actuall install the partial C compiler, you should run make
with the -k
option, to have it do it best, even in the face of errors. For example, use make -k install
.)
这篇关于构建 GCC 交叉编译器(从“Linux"到“Windows")的文章就介绍到这了,希望我们推荐的答案对大家有所帮助,也希望大家多多支持IT屋!