从Windows到Linux的C ++交叉编译器
有没有用户友好的工具,从Windows到Linux交叉编译?
crosstool-ng支持用cygwin主机构build交叉编译器 。
概述:
- 用开发包安装cygwin
- 下载
crosstool-ng
- 解压tarball(
tar xvjf crosstool-ng*
) - 运行
./configure
- 当configuration抱怨丢失的工具,回到cygwin安装并安装相应的软件包(例如
flex
,libtool
,ncurses-devel
)至less需要以下内容:- 用devel /的gperf
- 用devel /野牛
- 用devel / byacc
- 用devel / wget的
- 用devel /补丁
- 开发/制作(GNU版本)
- Devel / automake 1.10+
- 利布斯/ libncursesw10
- 利布斯/ libncursesw10-devel的
-
make
-
make install
- 创build一个用于构build交叉编译器的新目录,例如
/usr/src/cross-linux-gnu-root
- 在registry中启用全系统区分大小写支持(请参阅https://superuser.com/questions/266110/how-do-you-make-windows-7-fully-case-sensitive-with-respect-to-the-文件系统#answer-842670 )
- 挂载目录区分大小写(例如
mount c:/cygwin/usr/src/cross-linux-gnu-root /usr/src/cross-linux-gnu -o binary,posix=1
) - 从交叉编译器构build目录中,
ct-ng menuconfig
- 在菜单中,将目标体系结构设置为
x86
(可能)和子体系结构设置为i686
(避免GCC 4.8问题 ,谢谢osm0sis),将内核指向linux
,将目标C库设置为glibc
,并启用C ++编译器。 - 要解决4.0版的问题 ,还要启用
Paths and misc options
试验,然后进入Companion tools
(在顶层),并启用Build some companion tools
,然后make 3.81
(感谢osm0sis) - wget与最新的kernel.org证书有问题,所以在接受的答案中使用.wgetrc方法: 如何在Cygwin的HTTPS URL上运行wget时修复证书错误? (谢谢osm0sis)
- 目前需要3个文件补丁来避免进一步的错误:
- 注释中提到的_libintl_gettext错误
- 字节转换标题和
- ELF标题 (谢谢Duncan Calvert&osm0sis)
-
ct-ng build
当然,这不会让你在Visual Studio中构buildLinux应用程序。 (VS2010和更高版本可以使用其他工具链(如gcc)构build,但除了由crosstool-ng构build的交叉编译器之外,还需要适当的工具链描述)。 但是你会有一个工作的g++-linux-gnu
,你可以直接运行或者使用Makefile。
注:构build交叉编译器需要很长的时间。 osm0sis 在这里提供了一个预编译的gcc 4.8.1 ,以及他关于构build交叉编译器(用于更新这个答案)的注释。
最好的办法是使用像Code :: Blocks这样的跨平台IDE,它可以导入MSVC项目,并生成一个Linux的Makefile,然后你可以在Linux上运行(如果你愿意的话,甚至可以使用相同的程序)。
所以你的工作stream程将如下所示:
Code, Compile, and debug on MSVC -> import into Code::Blocks & generate Makefile -> test compile and debug with GCC -> copy to Linux with Code::Blocks -> test compile & debug on Linux
这可能是一点点钝,但是至lessCode :: Blocks需要处理许多像Makefiles这样的小细节,而不是什么。
你是否要求一些可以将代码编写成在Windows上运行并使其在Linux上运行的东西? 没有一个真正的编译器可以做到这一点 – 但也许你正在寻找Wine( http://www.winehq.org/ ),它可以让你在Linux上运行Windows应用程序(如果他们使用的是Wine的Wine)。
编辑:我假设你的代码是在这个答案中使用Windows API(Win32等)。 如果您只使用标准C ++和跨平台的可用库,那么还有很多其他答案。
我不相信有任何编译器允许你在Windows上编译,然后把生成的二进制文件在Linux机器上运行。 最好的办法是设置两个开发环境,一个在Windows上,一个在Linux上。 在Windows环境下进行大部分的开发和debugging工作,如果这很适合你,那么在Linux下经常编译和testing,确保你的代码是真正跨平台的。 您还需要使用跨平台的构build系统和testing框架。 我build议分别使用cmake和Google Test 。
从Windows编译到Linux而不使用虚拟化或交叉编译器,而只能通过coLinux本地化
无需离开(重新启动)窗口创build本地Linux可执行文件。
C / C ++通过合作Linux在Windows下编译Linux
Windows和Linux之间通过ALT-TAB进行的最快切换(不需要重新启动或重新启动)。
1.安装coLinux( http://sourceforge.net/projects/colinux/files/latest/download?source=files )
2.使用coLinux根文件系统映像:Ubuntu-9.04-1gb.7z( http://sourceforge.net/projects/colinux/files/Images%202.6.x%20Ubuntu/Ubuntu%209.04/ )
3.开始coLinux
4.将string“archive.ubuntu.com”更改为“old-releases.ubuntu.com”:
shell> sudo vi /etc/apt/sources.list
5.更新你的configuration:
shell> sudo apt-get update
6.安装两个软件包来编译你的程序:
shell> sudo apt-get install build-essential
(c / c ++,gcc编译器)
shell> sudo apt-get install libmysqlclient15-dev
(mysql dev 5.1)
7.从coLinux访问Windows目录
shell> mount cofs0 / mnt / -t cofs
shell> cd / mnt
8.Compile
shell> c ++ your.source.cc -o executable.name