【发布时间】:2009-11-25 20:09:40
【问题描述】:
我可以在 Linux 中编译 Windows C 控制台应用程序 (.exe) 吗? (更具体地说,Ubuntu)
我很久以前就听说过交叉编译器,但当时我对它们并不感兴趣。
最好的问候
【问题讨论】:
我可以在 Linux 中编译 Windows C 控制台应用程序 (.exe) 吗? (更具体地说,Ubuntu)
我很久以前就听说过交叉编译器,但当时我对它们并不感兴趣。
最好的问候
【问题讨论】:
this post 提供了一些信息,还有这个duplicate question
当您使用 Ubuntu 时,您需要的软件包是(我认为)mingw32
apt-get install mingw32
然后用i586-mingw32msvc-gcc编译,例如
i586-mingw32msvc-gcc helloworld.c -o helloworld.exe
【讨论】:
如果它是标准 C 并且不使用 Windows 库,则可以。
C 代码本身非常可移植,标准 C 库 (libc) 几乎随处可用。如果您的代码执行 printf() 和 sscanf() 和 fopen() 等等,那么它只会在另一个平台上编译和运行。 Windows、Linux、BSD 等。
是 libc 以外的库其他引入了可移植性挑战。
任何与特定于 Windows 的平台库链接的东西都是麻烦的。 kernel32.lib、user32.lib等。
还有第三方库,如果用 C 编写,应该可以在 Linux 和 Windows 上使用。 PCRE 就是一个很好的例子——它是一个用 C 语言编写的正则表达式库,它可以在 Windows 和 Linux 上使用。这个集合中实际上有数百个库。
如果您将自己限制在可移植库中的 libc 和库调用,那么您将拥有一个可移植的 C 应用程序。
【讨论】:
如果您谈论的是严格的 ANSI C 应用程序,那么在 Linux 平台上使用 gcc 编译应该没有任何问题。
如果您喜欢 Windows 系统库,那么您将不得不用它们的 *nix 系统等效项(如果有的话)替换这些调用。
【讨论】:
如果您希望将 Linux 中的程序编译为 Windows 可执行文件,则可以选择交叉编译器。 http://www.airs.com/ian/configure/configure_5.html 帮了我一点忙。
【讨论】:
你的意思是你能在 Linux 上构建一个 windows .exe(即在 linux 上开发并将应用程序交付给 Windows 用户吗?)
或者您的意思是获取一个 Windows 应用程序并将其重新编译(移植)到 Linux 以便在 Linux 上构建和运行?
【讨论】:
您可以使用WINE 并安装VS,例如。其他解决方案使用MonoDevelop。
你也可以使用像Code::Blocks这样的交叉编译器
【讨论】:
您也可以在 linux 的终端中使用标准 gcc,您可以使用相同的程序,只需将 std.h 更改为 unistd.h(这意味着您需要更改为 linux 特定的库)。 我在学校有一门关于 linux 编程的课程,除了它是关于 ubuntu 和输入/输出的库更改以及一些与 linux 相关的线程,都是一样的
example : gcc -c myprogram.c // 编译 gcc -o myprogram.o 名称来制作 lib myprogram // 如果有参数,则带参数
【讨论】: