MSVC是否严格需要在Windows上编译?

一些开源项目明确指出,为了在windows上编译,他们需要一个微软编译器(通常也是一个特定的版本,因为后者的版本是不兼容的,或者会拒绝编译旧的代码)。

因为对我来说似乎是荒谬的,因为有可以编译为windows的foss编译器,所以微软的编译器对于任何基本的任务都是必须的,我假设这是因为那些项目使用api调用库(比如msvcrt *)。 dll),因为某些原因,mingw-gcc,clang和其他windows编译器的端口无法编译。

我对这些要求的理解是很浅薄的,因为我对编译代码的经验主要来自linux,这使我很担心,因为获得一个微软编译器是不平凡的。 唯一的办法就是通过microsoft visual c ++的快速版,即使如此,最新的版本也会完全拒绝安装在像我这样的旧的winxp机器上,目前唯一可用的版本是vc ++ express2010,这需要注册才能从试用软件变成免费软件(即使如此,我还不清楚这是否会起作用,或者它会带来什么 – 也许操作系统挂钩“debugging”和其他干涉?)。

1)我的问题是,这些项目是否依赖于微软编译器,因为针对这些微软的库(这显然是编译器无法做到的)?

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

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

3)我可以简单地使用铛和一些小部件库来制作原生的Windows软件吗?

4)我可以修改项目的来源,使其不依赖于微软的编译器吗?

(好吧,这是4个问题,对不起,我很难明确表示)。

1)我的问题是,这些项目是否依赖于微软编译器,因为针对这些微软的库(这显然是编译器无法做到的)?

编译器供应商和GUI框架供应商可以提供类似于MS DLL的DLL。 一些MS DLL是系统 DLL,并被其他编译器和框架供应商使用。

如果您使用的是编译器或特定于框架的DLL,则需要伴随您的程序(项目)的安装。

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

不。如果你通过StackOverflow上的帖子进行扫描,有很多人直接使用Windows API,我猜你正在调用本地 Windows软件。 通常,这些API的代码位于系统API中。 编译器将函数调用转换为这些DLL中的调用,并根据需要加载它们。

3)我可以简单地使用铛和一些小部件库来制作原生的Windows软件吗?

不,你不能。 这就是为什么他们存在。 同样,很多人都在使用像Qt和xWidgets这样的没有MS编译器的框架。 我做了一段时间。 我切换到Visual Studio,主要是为了调试器。 我不喜欢其他IDE试图使用GDB。 否则,我不会使用MS,因为他们倾向于使用Microsoft标准语言而不是ISO。

4)我可以修改项目的来源,使其不依赖于微软的编译器吗?

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

尝试安装Cygwin。 当您查看所有库时,您将意识到可以创建不使用MS编译器的项目。 再次,阅读StackOverflow文章,你会发现人们正在使用其他编译器,如英特尔,GNU,Clang,Greenhills等。 一些用于嵌入式系统的编译器也将针对Windows操作系统进行编译,因此您可以编写可在两个平台上工作的代码。

看起来你需要在网上搜索“GNU GUI教程C ++”,看看弹出的是什么。 另外,为其他框架搜索“wxWidgets”和“Qt”。