40

是否有将 C++ 应用程序从 Linux 交叉编译到 Windows 的手册?

只是。我想要一些信息(链接、参考、示例...)来指导我这样做。

我什至不知道这是否可能。

我的目标是在 Linux 中编译一个程序并获得一个可以在 Windows 下运行的 .exe 文件。

4

3 回答 3

52

基础并不难:

sudo apt-get install mingw32    
cat > main.c <<EOF
int main()
{
  printf("Hello, World!");
}
EOF
i586-mingw32msvc-cc main.c -o hello.exe

替换apt-getyum,或您的 Linux 发行版使用的任何内容。这将为 Windows 生成一个hello.exe

一旦你明白了这一点,你可以使用autotools,并设置CC=i586-mingw32msvc-cc

CC=i586-mingw32msvc-cc ./configure && make

或者使用CMake 和工具链文件来管理构建。更困难的仍然是添加本地交叉库。通常它们存储在/usr/cross/i586-mingw32msvc/{include,lib}其中,您需要在构建过程的配置步骤中单独添加这些路径。

于 2008-10-08T12:21:42.073 回答
6

这取决于你的意思(我真的不能说)。

  1. 如果您的意思是要在 Windows 上使用现有的 Linux 应用程序,那么您可以尝试在 Windows 上使用Cygwin编译它。然而,这并没有为您提供一个没有对 Cygwin 的所有依赖项的 Windows 可执行文件(您的可执行文件仍然依赖于该cygwin.dll文件) - 它仍然可能需要一些移植才能工作。请参阅http://www.cygwin.com

  2. 如果您的意思是您希望能够在 Linux 上执行 Windows 应用程序的实际编译并生成在 Windows 上可执行的 .exe 文件 - 从而使用您的 Linux 机器进行开发和/或编译,那么您应该查看MinGW Linux 是一个用于在 Linux 上为 Windows 进行交叉编译的工具。请参阅http://www.mingw.org/wiki/LinuxCrossMinGW

最好的祝福!

于 2008-10-08T12:25:02.330 回答
4

我建议您尝试一下GUB(Grand Unified Builder),因为它交叉编译了几个包及其依赖项,并将它们组装成一个适用于当前 11 种架构的安装包。您可以从此处下载预构建的 iso 以安装在 VM 中,并此处关注源代码。它目前可用于交叉编译 GNU LilyPond/GNU Denemo/Inkscape 和 OpenOffice.org。

目标架构是:

  • darwin-ppc - Darwin 7 (MacOS 10.3)/PowerPC 的 tar.bz2 文件
  • darwin-x86 - Darwin 8 (MacOS 10.4)/x86 的 tar.bz2 文件
  • mingw - Windows32 的 mingw 可执行文件
  • linux-x86 - Linux/x86 的 shar 存档
  • linux-64 - Linux/x86_64 的 shar 存档
  • linux-ppc - Linux/PowerPC 的 shar 存档
  • freebsd-x86 - FreeBSD 4/x86 的 shar 存档
  • freebsd-64 - FreeBSD 6/x86_64 的 shar 存档
  • cygwin - 用于 Cygwin/Windows32 的 .tar.bz2 包
  • arm - Linux/ARM 的 shar 存档(大部分未经测试)
  • debian - Debian 的 shar 存档(大部分未经测试)
于 2010-08-25T23:15:43.130 回答