注意:这个问题的目的是要找到是否存在用于Windows的VC中开发并将该代码平稳地移植(意味着对代码进行尽可能少的编辑)到Linux系统的标准方法。编译成可执行文件并运行。
根据我收到的答案,我可以看出存在误解。因此,我将把这个问题分为两个独立的问题。一个是我的原始问题(修订的问题),另一个是我的特定问题以及解决方法。(一旦发布,我将添加指向该问题的链接)。
注意:我对C ++和使用makefile进行编译是相当陌生的。
我一直在创建一个可以在Linux服务器上运行的C ++程序,到目前为止,我一直在使用Visual Studio(Window的当前版本)编写所有代码。为了安全起见,在开始编写程序之前,我尝试在VC中创建一些基本的C ++文件,将它们转移到服务器上,然后使用g ++进行编译并运行可执行文件。一切都解决了,所以我想:
“嘿,我可以继续编写我的整个程序,遵循相同的过程,一切都会好起来的!”
显然,我错了,这就是为什么我在这里。
运行我的makefile文件时,我会遇到很多错误,而且我不确定如何处理这种情况。大量错误消息似乎暗示了我对向量的使用(当然,在使用VC编译时,它运行良好)。
我看过以下问题:
如何在Visual Studio 2010 for Linux中进行编译
但是我真的找不到直接解决我的问题的方法(例如,我宁愿避免在Linux平台上安装VC并从那里开始工作)。
我也研究了wineg ++(并尝试使用了它),但是在编译时似乎没有任何改变。
我应该如何处理这个问题?
含义:在Windows VC上进行开发然后移植到Linux是一种常见的做法吗?如果是这样,是否有确保一切顺利的标准方法?还是只是知道Linux上的编译器的工作方式并适当地编码以免发生错误?
最好是一种允许我继续在Windows上进行开发并在完成后将所有内容移植到Linux的解决方案。另外,如果可能的话,请尝试使所有答案尽可能简单。关于大多数此类内容,我还是很业余。
编辑:我还想提到我并没有真正使用任何疯狂的库。只是math.h和vector。
错误的一些示例是:
用一些双打初始化向量:
相应的编译错误:
只要您以可移植的方式(不使用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] 删除。
我来说两句