我正在使用Visual Studio在C中开发教育系统。我将通过Web服务器支持此服务。
问题是我的服务器运行Linux操作系统。我可以在Linux上使用Visual C编译C代码吗?它必须编译为Windows可执行文件(* .exe)。
通过搜索我得到了答案:“你可以用MinGW编译C”。但是,我使用了很多Windows API,我不相信这个答案。 (_beginthreadex,FillConsoleOutputCharacter,CreateConsoleScreenBuffer和stuff)。
如果我想将C代码编译为Linux系统上的Windows可执行文件,是否必须使用MinGW进行开发?
答案 0 :(得分:2)
我可以在Linux上使用visual c编译C吗?
不,在实践中你不能(当然你不应该)。顺便说一句,如果你坚持某些C标准,如C11(见n1570)或C99或C++14,你可能不太关心特定的编译器。
但我使用了很多windows apis
正如您所猜测的,这些Windows API是特定的到MicroSoft Windows,您无法在Linux上获取(或使用)它们(您可能需要Microsoft许可证)使用WinAPI运行程序)。请注意Wine能够在Linux 某些 Windows executables上运行(但您可能无法通过某些Web服务器使用它)。
你应该使用POSIX线程(here是一个很好的教程) - 或者考虑在C ++ 11中编码并使用它的thread库(因为C11 thread库也是如此最近在Linux上 - 也可能在Windows上!)。
我的建议:
如果您的程序是某个HTTP服务器,请考虑使用某些HTTP服务器库,如libonion或Wt(或者使用FastCGI使您的应用程序与其他某些Web通信服务器)。如果您这样做,请熟悉HTTP(& HTML5和其他网络技术,例如AJAX)。
如果您的应用需要终端界面(不是网络界面!),请使用ncurses
如果你的应用程序想要一个GUI界面(不是网络界面!),请使用widget toolkit或Qt之类的GTK(这些是跨平台的,所以你的代码对其他操作系统来说是可移植的。)
在您自己的笔记本电脑上安装和使用Linux非常简单,Linux非常适合开发人员使用。阅读一些Linux系统编程书(也许是旧的ALP)。另请参阅intro(2),syscalls(2),intro(3)。
请注意,WinAPI是专有的(对Microsoft而言),但POSIX是标准规范(Linux实际上主要是POSIX兼容的)。
我必须和mingw一起发展吗?
我建议在您的开发计算机上安装和使用Linux ,然后使用GCC和/或Clang(在命令行上,但您可能会这样做)使用build automation或make之类的ninja工具。别忘了启用所有警告和调试信息(例如使用g++ -Wall -Wextra -g
编译)。当然你需要为Linux& POSIX API(不是Windows版)。
(它正在使您的代码适应Linux和POSIX API,它将完成大部分工作,而不是使用GCC或Clang,它们都是C99或C11或C +符合+11或C ++ 14标准,并接受许多常用选项。)
我还建议您在open source的某个github许可下发布源代码。然后你可能会得到一些帮助。
您可能对WSL感兴趣,因为在某些情况下您可能会在Windows上运行Linux可执行文件
(但我不知道细节,因为我从未使用过Windows)
PS:如果要为 Windows编译,将Windows保留在笔记本电脑上会更简单;因为cross-compilation不太方便。
答案 1 :(得分:2)
我必须和mingw一起发展吗?
MinGW是Windows操作系统的GCC端口,没有别的。即您可以直接在Windows上编译Windows特定代码,或者在GNU / Linux上交叉编译相同的代码,然后在Windows上运行可执行文件。 GCC - 表示GNU编译器集合,它有C,C ++,Objective C和其他一些编译器。 GCC C编译器是GNU linux使用的主要C编译器。
我可以在linux上使用visual c编译c吗?
不,你不能,因为Visual Studio C编译器没有移植到GNU / Linux。但您可以使用GCC编译C代码。
但我使用了很多windows apis,我不相信这个答案。 (_beginthreadex,FillConsoleOutputCharacter,CreateConsoleScreenBuffer和stuff)
如果您需要在GNU / Linux操作系统上运行为Windows编写的程序,可以使用Wine。即在Windows上编译你的exe文件,然后在GNU / Linux上运行它。
同时,这不是个好主意。最好使用一些标准或跨平台API。然后使用您想要的任何编译器将其编译为您想要使用的操作系统。
E.G。