【问题标题】:Can I compile C using Visual C on Linux? [closed]我可以在 Linux 上使用 Visual C 编译 C 吗? [关闭]
【发布时间】:2018-04-10 15:27:51
【问题描述】:

我正在 Visual Studio 上用 C 语言开发一个教育系统。我将通过 Web 服务器支持这项服务。

问题是我的服务器运行的是 Linux 操作系统。我可以在 Linux 上使用 Visual C 编译 C 代码吗?它将必须编译为 Windows 可执行文件 (*.exe)。

通过搜索我得到了答案:“你可以用 MinGW 编译 C”。但是,我使用了许多 Windows API,我不相信这个答案。 (_beginthreadex、FillConsoleOutputCharacter、CreateConsoleScreenBuffer 等)。

如果我想在 Linux 系统上将 C 代码编译为 Windows 可执行文件,是否必须使用 MinGW 进行开发?

【问题讨论】:

  • 你真的想把你的生活复杂化吗? Linux 有大量的原生开发工具。使用它们。
  • 您的软件有多大(以数千行源代码计)?是free software 吗?
  • 我不明白您所说的“我将通过 Web 服务器支持此服务”的确切含义。请编辑您的问题以改进它。添加几个段落来解释您的系统的功能以及它有多大。
  • 还用几句话解释为什么它是一个教育系统。对我来说,这意味着学校(和其他formal education 设施)的组织,我不了解与软件的关系。
  • 另外,用几句话解释谁会使用你的软件,以及如何(通过浏览器?)

标签: c linux compilation mingw


【解决方案1】:

我必须用mingw开发吗?

MinGW 只是 Windows 操作系统的 GCC 端口,仅此而已。 IE。您可以直接在 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 api,我不相信这个答案。 (_beginthreadex、FillConsoleOutputCharacter、CreateConsoleScreenBuffer 等)

如果您需要在 GNU/Linux 操作系统上运行为 Windows 编写的程序,您可以使用Wine。 IE。在 Windows 上编译您的 exe 文件并在 GNU/Linux 上按原样运行它。

同时,这不是一个好主意。最好使用一些标准或跨平台 API。然后使用您想要的任何编译器为您想要使用的操作系统编译它。

例如

  1. thrd_create 而不是 _beginthreadex
  2. ncursespdcurses 而不是 Windows 控制台特定功能

【讨论】:

  • 非常感谢!谢谢!
【解决方案2】:

我可以在 Linux 上使用 Visual c 编译 C 吗?

不,实际上您不能(当然也不应该)。顺便说一句,如果您坚持使用某些 C 标准,例如 C11(参见 n1570)或 C99 或 C++14,您可能不太关心特定的编译器。

但是我使用了很多 windows api

正如您所猜到的,这些Windows APIs 特定MicroSoft Windows,您无法在 Linux 上获取(或使用)它们(并且您可能需要 Microsoft 许可证才能运行程序使用 WinAPI)。请注意,Wine 能够在 Linux some Windows executables 上运行(但您可能无法通过某些 Web 服务器使用它)。

您应该使用 POSIX 线程(here 是一个很好的教程)- 或者考虑在 C++11 中编码并使用它的 thread 库(因为 C11 thread 库在 Linux 上太新了 - 可能在 Windows 上也是如此!)。

我的建议:

    1234563如果您这样做,请熟悉HTTP(&HTML5 和其他网络技术,例如AJAX)。
  • 如果您的应用程序需要终端界面(而不是 Web 界面!),请使用 ncurses

  • 1234563其他操作系统)。
  • 如果跨平台可移植性很重要,请考虑使用 C++ 框架,例如 BoostPocoQtWt

  • 在您自己的笔记本电脑上安装和使用 Linux 很容易,而且 Linux 对开发人员非常友好。阅读一些 Linux 系统编程书籍(也许是旧的ALP)。另见intro(2)syscalls(2)intro(3)

请注意,WinAPI 是专有的(属于 Microsoft),但 POSIX 是一个标准规范(Linux 实际上大部分是 POSIX 兼容的)。

我必须用mingw开发吗?

我建议在您的开发机器上安装和使用 Linux,然后使用 GCC 和/或 Clang(在命令行上,但您可能会使用一些 build automation 工具比如makeninja)。不要忘记启用所有警告和调试信息(例如使用g++ -Wall -Wextra -g 编译)。当然,您需要针对 Linux 和 POSIX API(不是 Windows 的 API)进行开发。

(它使您的代码适应 Linux 和 POSIX API,它将带您完成大部分工作,而不是使用 C99 或 C11 或 C++11 或 C+ 的 GCCClang符合 +14 标准,并接受许多常用选项。)

我还建议在github 上以open source 许可发布您的源代码。然后你可能会得到一些帮助。

您可能会对WSL 感兴趣,因为在某些情况下您可能会在 Windows 上运行 Linux 可执行文件

(但我不知道细节,因为我从未使用过Windows)

PS:如果你想编译for Windows,把Windows放在你的笔记本电脑上会更简单;因为cross-compilation不太方便。

【讨论】:

  • 非常感谢!
  • 考虑通过编辑来改进您的问题...这有点令人困惑和不清楚。在您的问题下查看我的 cmets!
  • 对不起.. 我英语不好。我制作制作程序并提供给用户的服务。它是windows执行文件。但服务器是linux。所以..我很抱歉。
  • 我也不是以英语为母语的人。但是请编辑您的问题,也许可以借助一些您的母语和Wikipedia 的字典。我不明白您所说的“提供服务”是什么意思。与web services 有什么关系?不要评论你的问题,但要改进它。如果你改进你的问题,你会得到更好的答案(我可以改进我上面的答案)
猜你喜欢
  • 1970-01-01
  • 1970-01-01
  • 2011-11-22
  • 1970-01-01
  • 1970-01-01
  • 2021-01-29
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
相关资源
最近更新 更多