从Linux到Windows进行交叉编译C++,真的可行吗?

5
我有一些非常简单的命令行程序的源代码。我考虑在Linux机器上编译它们(它们是在这里开发的),以便在Windows上使用。如果我没错的话,这被称为交叉编译。我从未尝试过,但昨天阅读了一些信息,似乎有点复杂或不成功。我想听听你的意见,以及如何移植一个简单的“hello world”程序,该程序使用g++在Linux上编译。
谢谢
5个回答

7

可以了解一下 mingw,这是一个在Linux上构建Win32应用程序的工具套件。如果程序不依赖于mingw不支持的任何Linux特定功能,那么使用它就没问题。


如何在Windows上下载整个Migwin系统?从这里我只看到Mingw各个部分的列表:http://sourceforge.net/projects/mingw/files/ - Open the way
问题已解决。我的愚蠢是因为我从 Linux 访问了该网站。从 Windows 机器上,您可以直接获取 setup.exe 安装程序。 - Open the way

4
请注意,交叉编译和跨平台不是同一件事。通过交叉编译,您可以在Linux机器上将代码编译为Windows可执行文件,然后将可执行文件传输到Windows机器上。而通过跨平台,您需要将源代码传输到Windows机器上,并使用Windows编译器编译为Windows可执行文件。
前者相当困难(但并非不可能),后者非常容易,可以使用像MinGW这样的编译器,正如其他人所提到的那样。

1

我每天都进行交叉编译。但是我不会每天都设置交叉编译器。这可能有些棘手,但肯定是可行的。


1
只要您使用标准的C++,您的代码就可以跨平台。您还可以使用跨平台库,如STL、boost、Poco、Qt等等...
只有当您开始使用特定于平台的代码时,您才会失去可移植性。例如,包括<windows.h>将使您的代码仅在Windows上编译。(有一些技巧可以解决这个问题,比如#ifdef宏。这样可以在一个平台上启用某些代码部分。)
因此,一个简单的“Hello World”程序应该可以在Linux、Mac、Windows或任何其他平台上工作。您不需要任何特殊的东西。
注意:
有些人可能会提到Cygwin或mingw32。我简要解释一下它们是什么:
Cygwin允许您在Windows机器上使用gcc/g++编译Linux应用程序。
Mingw32允许您在Windows机器上使用gcc/g++编译Windows应用程序。
编辑:
如果您想设置一个用于交叉编译的系统,那么我建议您看一下cmake

0

是的。我们目前正在编译一个250 kloc的应用程序,使用每日构建的Qt。它每天都完美地工作,尽管我必须承认它并没有在公司外部分发,而只在内部使用。对于正式发布,我们更喜欢使用Visual Studio。

使用Debian上的mingw标准包进行编译。


网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接