在windows上编译MSVC是严格必要的吗?

Is MSVC strictly necessary to compile on windows?

本文关键字:windows 编译 MSVC      更新时间:2023-10-16

一些开源项目明确声明,为了在windows上编译,它们需要一个microsoft编译器(通常也是一个特定的版本,因为后面的版本不兼容或将拒绝编译旧代码)。

因为这对我来说似乎很荒谬,因为自由/开源编译器可以为windows编译,一个微软编译器对于任何基本任务都是必要的,我假设这是因为这些项目使用api调用库(如msvcrt*.dll),由于某种原因,mingw-gcc, clang和其他端口的windows编译器无法编译。

我对这些要求的理解很肤浅,因为我编译代码的经验主要来自linux,这让我很担心,因为得到一个微软编译器是很重要的。获得它们的唯一方法是通过微软visual c++的express版本,即使这样,最新的版本也会完全拒绝安装在像我这样的旧winxp机器上,目前唯一可用的版本是vc++express2010,它需要注册才能从试用软件变成免费软件(即使这样我也不清楚这是否有效,或者它需要什么-也许操作系统挂钩"调试"和其他干扰?)

1)我的问题是,这些项目是否依赖于微软编译器,因为构建这些微软专用库(显然是自由/开源编译器不能做的)?

如果原因是构建脚本或预处理器指令,这似乎是荒谬的,因为它们可以相对容易地移植。

2)此外,是否有可能,即使我避免任何msvcrt/.net/etc。调用,我仍然可以发现自己需要一个微软编译器来编译本地Windows软件(假设没有使用执行这些调用的库)?

3)我可以简单地使用clang和一些widget库来制作本机windows软件吗?

4)我可以修改一个项目的源代码,使它不依赖于微软编译器吗?

(好,这是4个问题,对不起,我很难表达清楚)

1)我的问题是,这些项目是否依赖于微软的编译器针对这些微软独有的库进行构建(显然自由/开源编译器不能做的事)?

编译器供应商和GUI框架供应商可以提供执行类似于MS dll的dll。一些MS dll是system dll,被其他编译器和框架供应商使用。

如果您正在使用编译器或框架特定的dll,它们需要伴随您的程序(项目)的安装。

2)此外,是否有可能,即使我避免任何msvcrt/.net/etc。调用,我仍然可以发现自己需要一个微软编译器来编译原生Windows软件(假设没有使用这样的库)执行这些呼叫)?

。如果你浏览StackOverflow上的帖子,有很多人直接使用Windows API,我猜你称之为原生的Windows软件。通常,这些API的代码位于系统API中。编译器将函数调用转换为对这些dll的调用,必要时加载它们。

3)我可以简单地使用clang和一些小部件库来使本机Windows软件也可以吗?

不,你不能。这就是它们存在的原因。同样,许多人使用Qt和xWidgets这样的框架而不使用MS编译器。我做了一段时间。我转而使用Visual Studio,主要是为了调试器。我不喜欢其他ide使用GDB的方式。否则,我不会使用MS,因为他们倾向于使用微软标准语言,而不是ISO。

4)我可以修改一个项目的源代码,使它不依赖于微软编译器吗?

不,这就是为什么有免费软件和其他编译器在那里。
嗯,我们可以用Java创建不使用MS编译器的gui,但是它们使用Windows API。

尝试安装Cygwin。当您查看所有库时,您将意识到可以创建不使用MS编译器的项目。再一次,通读StackOverflow的帖子,你会发现人们正在使用其他编译器,如Intel、GNU、Clang、Greenhills等。一些嵌入式系统的编译器也可以编译Windows操作系统,所以你可以编写在两个平台上都工作的代码。

看起来你需要在网上搜索"GNU GUI教程c++",看看弹出什么。另外,搜索"wxWidgets"answers"Qt"查找其他框架