LinuxSir.cn,穿越时空的Linuxsir!

 找回密码
 注册
搜索
热搜: shell linux mysql
查看: 1412|回复: 4

The magic of cross compiling -- 在Linux下编译出Windows exe文件

[复制链接]
发表于 2005-2-12 23:20:53 | 显示全部楼层 |阅读模式
一直只在编译原理课程中听说过交叉编译的概念,并没有真的实践过。即使后来需要把linux的源程序移植到windows下面运行,也是借助cygwin的编译环境,在windows下安装好cygwin后再编译源程序。后来在网上看到交叉编译的相关资料,决定动手实践一下,并测试成功。

在Linux下编译出windows exe,基本原理是用交叉编译版本的compiler和linker来产生出windows平台的代码。mingw项目的成员在这方面有十分杰出的贡献。可以通过mingw提供的binutils和gcc来实现我们的目的。我们所要做的只是在自己的Linux box下把环境正确架设起来

如果对gcc和binutils的参数相当熟悉,可以试着按照http://ricardo.ecn.wfu.edu/~cottrell/cross-gtk/的说明,自己动手配置环境。不过我更倾向于用脚本简化操作。www.libsdl.org的网站上面提供了已经编写好的脚本,可以自动从网上把需要的文件下载并编译安装。脚本地址在http://www.libsdl.org/extras/win32/cross/build-cross.sh

运行脚本以前,需要针对目前最新的版本情况,对脚本的各软件下载路径做个简单配置。对照https://sourceforge.net/project/showfiles.php?group_id=2435把脚本当中的软件版本设置好,就可以执行sh ./build-cross.sh开始下载(记住选一个快的镜像哦

脚本正常结束后,就可以进行交叉编译了。脚本的默认安装路径在/usr/local/cross-tools,编译器名字为i386-mingw32msvc-gcc。只需要用这个gcc代替默认的gcc就可以编译出windows exe文件了。

如果是编译按GPL发布的软件包,会需要用configure和Makefile来build代码,而它们并不能自动使用cross compile版本的gcc和ld。解决办法libsdl上面也有提供。从http://www.libsdl.org/extras/win32/cross/下载cross-make.sh和cross-configure.sh,用这两个脚本代替make和configure步骤即可。

参考文档:
http://www.libsdl.org/extras/win32/cross/README.txt
http://ricardo.ecn.wfu.edu/~cottrell/cross-gtk/
发表于 2005-2-18 15:02:16 | 显示全部楼层
有什么意义呢,我认为没有意义。
回复 支持 反对

使用道具 举报

发表于 2005-2-26 12:05:54 | 显示全部楼层
不知道交叉编译如何解决系统调用的问题. 期待回答.
回复 支持 反对

使用道具 举报

发表于 2005-2-26 19:32:08 | 显示全部楼层
Post by likedust
不知道交叉编译如何解决系统调用的问题. 期待回答.

这个不可能解决吧!
感觉就是在Linux编译Windows的源代码。当然有些代码是与操作系统无关的。
回复 支持 反对

使用道具 举报

发表于 2005-2-27 09:04:33 | 显示全部楼层
Post by likedust
不知道交叉编译如何解决系统调用的问题. 期待回答.

编译时只要能连接就行了。运行时才真正需要系统调用的支持。
回复 支持 反对

使用道具 举报

您需要登录后才可以回帖 登录 | 注册

本版积分规则

快速回复 返回顶部 返回列表