我想构建“gcc cross-compiler”来编译“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”
创建此目录层次结构:
“$ {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 --disable-nls
使
make install
将“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>
它正在构建大约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
从错误信息中我真的不知道现在该做什么: - (((。
有谁知道问题在哪里?
感谢。
答案 0 :(得分:11)
实际上没问题:事情的进展,你需要
dllcrt2.o
)您已成功执行上述第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包构建的东西。我假设您必须编译并安装它,而不仅仅是复制标题?