Warning: file_get_contents(/data/phpspider/zhask/data//catemap/4/c/69.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
C++ MSVC在windows上编译是否严格必需?_C++_C_Windows_Compiler Construction_Cross Compiling - Fatal编程技术网

C++ MSVC在windows上编译是否严格必需?

C++ MSVC在windows上编译是否严格必需?,c++,c,windows,compiler-construction,cross-compiling,C++,C,Windows,Compiler Construction,Cross Compiling,一些开源项目明确表示,为了在windows上编译,它们需要一个microsoft编译器(通常也需要一个特定的版本,因为后者的版本不兼容,或者拒绝编译旧代码) 因为在我看来这似乎是荒谬的,因为有可以为windows编译的foss编译器,任何基本任务都需要microsoft编译器,我假设这是因为这些项目使用对库的api调用(例如msvcrt*.dll),出于某种原因,mingw gcc,windows编译器的clang和其他端口无法针对进行编译 我对这些需求的理解是肤浅的,因为我对编译代码的经验主要

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

因为在我看来这似乎是荒谬的,因为有可以为windows编译的foss编译器,任何基本任务都需要microsoft编译器,我假设这是因为这些项目使用对库的api调用(例如msvcrt*.dll),出于某种原因,mingw gcc,windows编译器的clang和其他端口无法针对进行编译

我对这些需求的理解是肤浅的,因为我对编译代码的经验主要来自linux,这让我很担心,因为获得microsoft编译器并非易事。唯一的方法是通过微软的Visual C++的快速版本,即使是这样,最新版本将完全拒绝安装在像我的旧WiXP机器上,目前唯一的版本是VC++ + Express 2010,这需要注册从TraveWror变成免费软件。(即使这样,我也不清楚这是否有效,或者它需要什么——可能是操作系统挂钩“调试”和其他交互?)

1) 我的问题是,这些项目是否依赖于microsoft编译器,因为它们是针对这些仅限microsoft的库构建的(foss编译器显然无法做到这一点)

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

2) 此外,即使我避免了任何msvcrt/.net/等调用,我是否仍然需要microsoft编译器来编译本机windows软件(假设不使用执行这些调用的库)

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

4) 我是否可以修改项目的源代码,使其不依赖于microsoft编译器

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

1) 我的问题是,这些项目是否依赖于microsoft编译器 针对这些仅限microsoft的库进行构建(显然 自由和开放源码软件编译器不能做什么

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

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

2) 此外,即使我避免使用任何msvcrt/.net/etc,是否也有可能。 调用时,我仍然需要一个microsoft编译器来编译 本机windows软件(假定不使用 打那些电话

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

3) 我可以简单地使用clang和一些小部件库使其成为本地的吗 windows软件也一样吗

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

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

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

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


看起来您需要在web上搜索“GNUGUITutorialC++”,然后查看弹出的内容。另外,搜索其他框架的“wxWidgets”和“Qt”。

您指的是哪些项目?Clang(即LLVM)还没有一个可用的链接器(AFAIK),所以要么您自己进行链接,要么现在您坚持使用MSVC的oneMost UNIX/Linux编译器以相同的格式生成目标代码。同样,库的格式(静态和动态)也相当标准化。Windows编译器,包括Intel和Borland/Embarcadero的编译器,以不同的格式生成目标代码(我一度认为COFF是一种选择,但它不是默认的)。库文件格式甚至更为不同。因此,编译器/链接器开关集是不同的。@IvyLynx这是我的观点。。。但这不一定是一种选择。如果库仅以PC/DOS/Windows格式提供,则您没有使用例如mingw的选项。同样,如果库仅以.a或.so格式提供,我不相信您能够将其与MS编译器一起使用。@IvyLynx我也不相信MS工具集包含“make”实用程序。(Borland C++做了,并且包含了生成Maxfile的选项,但是“原生”项目文件格式是专有的)没有理由。每个项目都是不同的。也就是说,在我的经验中,最常见的原因(在自由和开放源码软件项目中)就是Windows支持对于开发人员来说优先级很低,他们只是懒得支持多个Windows编译器。(在许多情况下,添加对