MSVC是否必须在Windows上编译?

时间:2014-07-11 19:18:48

标签: c++ c windows compiler-construction cross-compiling

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

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

我对这些要求的理解很浅,因为我对编译代码的经验主要来自linux,这让我很担心,因为获得微软编译器并非易事。获得它们的唯一方法是通过microsoft的visual c ++的快速版本,即便如此,最新版本将完全拒绝安装在像我这样的旧winxp机器上,目前唯一可用的版本是vc ++ express2010,需要注册才能从试用软件转变为免费软件(即使这样我也不清楚它是否能够工作或者它需要什么 - 也许操作系统挂钩"调试"以及其他干涉?)。

1)我的问题是,这些项目是否依赖于微软编译器,因为建立了这些仅限微软的库(显然,化石编译器无法做到)?

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

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

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

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

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

1 个答案:

答案 0 :(得分:5)

  

1)我的问题是,这些项目是否依赖于微软编译器   建立反对这些微软的图书馆(显然   化石编译器做不到)?

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

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

  

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

没有。如果您浏览StackOverflow上的帖子,有很多人直接使用Windows API,我猜你称之为 native windows软件。通常,这些API的代码位于系统API中。编译器将函数调用转换为对这些DLL的调用,并根据需要加载它们。

  

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

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

  

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

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

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

看起来你需要在网上搜索“GNU GUI tutorial C ++”并查看弹出的内容。另外,为其他框架搜索“wxWidgets”和“Qt”。

相关问题