如何在Linux上编译Windows Visual C ++代码

保罗·沃尼克:

注意:这个问题的目的是要找到是否存在用于Windows的VC中开发并将该代码平稳地移植(意味着对代码进行尽可能少的编辑)到Linux系统的标准方法。编译成可执行文件并运行。

根据我收到的答案,我可以看出存在误解。因此,我将把这个问题分为两个独立的问题。一个是我的原始问题(修订的问题),另一个是我的特定问题以及解决方法。(一旦发布,我将添加指向该问题的链接)。

注意:我对C ++和使用makefile进行编译是相当陌生的。

我一直在创建一个可以在Linux服务器上运行的C ++程序,到目前为止,我一直在使用Visual Studio(Window的当前版本)编写所有代码。为了安全起见,在开始编写程序之前,我尝试在VC中创建一些基本的C ++文件,将它们转移到服务器上,然后使用g ++进行编译并运行可执行文件。一切都解决了,所以我想:

“嘿,我可以继续编写我的整个程序,遵循相同的过程,一切都会好起来的!”

显然,我错了,这就是为什么我在这里。

运行我的makefile文件时,我会遇到很多错误,而且我不确定如何处理这种情况。大量错误消息似乎暗示了我对向量的使用(当然,在使用VC编译时,它运行良好)。

我看过以下问题:

如何在Visual Studio 2010 for Linux中进行编译

将Visual Studio C ++移植到Linux

在Linux中编译Visual C ++代码?

但是我真的找不到直接解决我的问题的方法(例如,我宁愿避免在Linux平台上安装VC并从那里开始工作)。

我也研究了wineg ++并尝试使用了它),但是在编译时似乎没有任何改变。

我应该如何处理这个问题?

含义:在Windows VC上进行开发然后移植到Linux是一种常见的做法吗?如果是这样,是否有确保一切顺利的标准方法?还是只是知道Linux上的编译器的工作方式并适当地编码以免发生错误?

最好是一种允许我继续在Windows上进行开发并在完成后将所有内容移植到Linux的解决方案。另外,如果可能的话,请尝试使所有答案尽可能简单。关于大多数此类内容,我还是很业余。

编辑:我还想提到我并没有真正使用任何疯狂的库。只是math.hvector

错误的一些示例是:

用一些双打初始化向量:

在此处输入图片说明

相应的编译错误:

在此处输入图片说明

用户1942027:

只要您以可移植的方式(不使用OS /编译器特定的功能,如windows.h特定的编译器扩展)编写代码并使用可移植的库,它就应该同时与Visual Studio和GCC一起编译。

问题是,尽管它们都起作用,但它们的工作方式却有所不同。通常,它是不同的默认设置,您可能必须显式覆盖。举个例子:

  • Visual Studio 2017和更高版本默认为C ++ 14。使用/ std选项可以指定其他标准。

  • GCC具有默认设置,但是允许您更改用于编译的标准。编译

    g++ example.cpp
    

    使用默认标准(版本6之前的GCC为C ++ 98标准,版本6之后的GCC为C ++ 14)。您的代码似乎失败,因为您使用的是C ++ 11功能,但默认情况下编译器使用的是较旧的标准。

    g++ -std=c++11 example.cpp
    

    应该通过明确指定标准(在本例中为C ++ 11标准)使您的某些错误消失。

这些只是编译器选择的不同折衷。仅支持一种标准可能会使支持和修复错误更加容易,因为您没有不同的编译器+标准版本组合,这些组合可能具有不同的错误。能够更改用于编译的标准可以更轻松地测试程序是否可以在新标准下正常运行,或者必须修复哪些重大更改等。

总的来说,GCC至少是最小的,如果您想让它做一些额外的事情,您可以明确指定它。我建议使用类似:

g++ -Wall -Wextra -pedantic -std=c++11 example.cpp

首先使用-Wall-Wextra给出适当的警告级别,然后-pedantic告诉您是否尝试使用有效的编译器扩展,但会使代码的可移植性下降,最后但同样重要的是,您应始终指定要使用的标准。它-std=c++11-std=c++14或更旧的-std=c++98

本文收集自互联网,转载请注明来源。

如有侵权,请联系 [email protected] 删除。

编辑于
0

我来说两句

0 条评论
登录 后参与评论

相关文章

如何在Linux中编译C代码以在Windows上运行?

如何使用 Visual Studio 编译器在 Windows 上编译 cython 编译的 c 代码

在Windows for Linux中的Visual Studio中编译C代码

如何在Visual Studio中编译Objective-C代码

如何在Linux上从C源代码生成nasm可编译汇编代码?

在Visual Studio 2013上编译旧的C ++代码

在Ubuntu上的Visual Studio代码中编译C ++

我的 C++ 程序无法在 Visual Studio 代码上编译

如何设置Visual Studio Code来编译C ++代码?

如何使用我下载的Visual Studio编译C ++源代码

如何在Mac上的Windows上编译C#Visual Studio解决方案

如何在Ubuntu中使用Visual Studio Code编译C ++代码?

如何在Visual Studio代码中编译和运行C ++源文件

如何在Linux上正确调试交叉编译的Windows代码?

如何在Linux / Ubuntu上安装/编译SDL2 C代码

如何在Windows和CMake上使用Visual Studio编译Mac OS X的C ++

如何在Microsoft Visual Studio外部构建C ++代码

如何在Visual Studio Code中修改C ++的代码格式?

如何在Linux终端上编译C#代码?

在 Visual Studio Code 中编译 Hello World C++ 代码

使用Visual Studio 2013编译C ++ 11代码

Visual Studio代码任务以编译和运行.c文件

在Visual Studio 2013中编译简单的C代码

拆解Visual Studio Intel编译器C ++代码

Visual Studios,在 C 代码中使用预编译头文件

无法在NetBeans Windows上编译C代码

如何在Visual Studio代码中为C ++设置默认代码?

如何从Visual Studio.NET或Visual Studio 2005中的本机Visual C ++代码调用托管DLL

无法在新安装的Visual Studio Code上运行C ++代码