在Linux中编译Windows C控制台应用程序

4

我能在Linux系统(更具体地说,是Ubuntu)中编译Windows C控制台应用程序(.exe)吗?

我很久以前听说过交叉编译器,但当时我对它们不感兴趣。

此致敬礼

8个回答

15

这里有这个帖子提供了一些信息,以及这个重复的问题

因为您使用的是Ubuntu,所以您需要的软件包是(我想)mingw32

apt-get install mingw32

然后使用i586-mingw32msvc-gcc进行编译,例如:

i586-mingw32msvc-gcc helloworld.c -o helloworld.exe

1
到目前为止最好的答案,是的,有一个重复的问题:D 还很好地发布了所需的软件包。直截了当的回答,一针见血。 - Jorge Israel Peña
感谢您的回答。同时,对于重复的问题我很抱歉,我没有注意到。:-)继续保持好工作!再次感谢。 - John F.
1
在 Fedora 上,我们还有一些资源可以学习如何使用 mingw 编译 win32 程序,包括 IRC 频道、mingw32 工具和一堆预编译的 Windows 库。欲了解更多信息,请参见:http://fedoraproject.org/wiki/SIGs/MinGW。 - Conrad Meyer

3
如果使用标准的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应用程序。

我之前在Linux上使用GTK GUI工具包编译了Windows上的GUI应用程序。 - Jasen

0
如果你在谈论一个严格的 ANSI C 应用程序,那么在 Linux 平台上使用 gcc 编译应该不会有任何问题。
如果你需要使用 Windows 系统库,那么你需要将这些调用替换为它们在 *nix 系统中的等效物(如果有的话)。

0

0
你的意思是在Linux上构建Windows .exe文件(即在Linux上开发并将应用程序交付给Windows用户)吗?
还是说你的意思是将Windows应用程序重新编译(移植)到Linux上,以便在Linux上构建和运行?

0

你可以使用WINE并安装例如VS。其他解决方案使用MonoDevelop
还可以使用像Code::Blocks这样的交叉编译器。


0

交叉编译是可行的。据我所知,您可以得到一个Windows可执行文件,当然可以在Windows下运行(可能还可以在WINE下运行)。

有两种可能的选择:mingw和cygwin。

这里有一个教程here。 MingW交叉编译页面在here


0

你也可以在Linux终端中使用标准的gcc,你只需要将std.h更改为unistd.h(这意味着你需要更改为Linux特定的库),就可以使用相同的程序。

我在学校有一门关于Linux编程的课程,虽然它是在Ubuntu上进行的,但输入/输出和一些线程相关的Linux特定库都是相同的。

例如:gcc -c myprogram.c // 编译 gcc -o myprogram.o name // 生成库 myprogram // 如果有参数,则带上参数


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