介绍

在windows上使用交叉编译linux目标程序。举例来说,在windows编译一个hello.c文件生成hello目标程序,在linux运行hello能够输出hello world。 让大家少走弯路

实现原理

  1. C语言编译原理:编译就是将C语言转换成机器指令的过程,理论上只有能够写出合适的编译工具,我们就能再windows上编译任何目标机器的可执行程序。接触过VxWorks开发的同行一定深有体会。
  2. 本方案的实现原理就是通过crosstool-ng生成windows到linux的gcc编译工具,然后使用该工具来编译linux程序。
  3. 本方案使用到了cygwin,但是需要注意的是:cygwin仅仅提供了一个类linux的操作环境,并没有实质性的影响。也就是说你可以不用cygwin,你仅需要你自己编译的交叉编译工具或者本方案提供的编译好的交叉编译工具就可以实现你想要的效果。甚至可以明确的是:这里的交叉编译工具就是可执行程序:i686-unknown-linux-gnu-gcc.exe或者x86_64-unknown-linux-gnu-gcc.exe,以及一些linux上的头文件(.h)和共享库(.so,.lib)。

一些概念及参考

  1. 第一个C语言编译器是怎样编写的?
  2. Building a linux cross-compile toolchain under Cygwin64 on Windows 我的主体思路都来自这里,感谢该作者
  3. 网易: Cygwin镜像使用帮助

使用说明

读者请注意,我不推荐大家自己编译交叉编译工具,因为过程很慢并且容易出错,直接使用我提供的文件将会快速得到你想要的!

  1. 下载我提供的资源
  2. 安装cygwin到C:\cygwin64也就是默认安装
  3. 将 除cygwin外的文件拷贝到C:\cygwin64\home${你的用户名}\work目录,work需要你新建
  4. 在cygwin终端cd到该目录,使用tar xzvf XXX分别解压4个编译工具,注意每解压完一个都需要给文件夹重命名,否则前面解压的会被覆盖。
  5. 将设个编译器的bin目录都添加到环境变量path中。例如C:\cygwin64\home${你的用户名}\work\i686-unknown-linux-gnu-7.2.0
  6. 解压gcc-test.zip ,cd 到gcc-test;
  7. 运行 make,然后你会在build目录得到linux上可以自行的文件,拷贝到linux机器去执行吧。

资源

gcc-test.zip

x86_64-unknown-linux-gnu-9.2.0.tar.gz

i686-unknown-linux-gnu-9.2.0.tar.gz

x86_64-unknown-linux-gnu-7.2.0.tar.gz

i686-unknown-linux-gnu-7.2.0.tar.gz

 

 

有疑问欢迎邮件联系我logbug@aliyun.com

Logo

华为开发者空间,是为全球开发者打造的专属开发空间,汇聚了华为优质开发资源及工具,致力于让每一位开发者拥有一台云主机,基于华为根生态开发、创新。

更多推荐