从Windows到Linux的C ++交叉编译器

有没有用户友好的工具,从Windows到Linux交叉编译?

crosstool-ng支持用cygwin主机构build交叉编译器 。

概述:

  • 用开发包安装cygwin
  • 下载crosstool-ng
  • 解压tarball( tar xvjf crosstool-ng*
  • 运行./configure
  • 当configuration抱怨丢失的工具,回到cygwin安装并安装相应的软件包(例如flexlibtoolncurses-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