加入收藏 | 设为首页 | 会员中心 | 我要投稿 李大同 (https://www.lidatong.com.cn/)- 科技、建站、经验、云计算、5G、大数据,站长网!
当前位置: 首页 > 综合聚焦 > 服务器 > Linux > 正文

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

发布时间:2020-12-14 00:32:09 所属栏目:Linux 来源:网络整理
导读:注意:这个问题的目的是找出是否存在一种在VC中为 Windows开发的标准方法,并将该代码平滑地移植到 Linux系统上(意思是尽可能少地编写代码),以便它可以编译成可执行文件并运行. 根据我收到的答案,我可以看到存在误解.因此,我打算将这个问题分成两个单独的问题
注意:这个问题的目的是找出是否存在一种在VC中为 Windows开发的标准方法,并将该代码平滑地移植到 Linux系统上(意思是尽可能少地编写代码),以便它可以编译成可执行文件并运行.

根据我收到的答案,我可以看到存在误解.因此,我打算将这个问题分成两个单独的问题.一个是我原来的(修订后的问题),另一个是我的具体问题以及如何解决它. (我会在发布后添加这个问题的链接).

注意:我对C很新,并使用makefile进行编译.

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

“嘿,我可以继续编写我的整个程序,按照相同的流程,一切都会好的!”

显然,我错了,这就是我在这里的原因.

当我运行我的makefile时,我得到了几十个错误,我不确定如何处理这种情况.大量的错误消息似乎暗示了我使用向量(当然,在使用VC编译时运行正常).

我看过以下问题:

How to compile in Visual Studio 2010 for Linux

Port Visual Studio C++ to Linux

Compiling Visual C++ code in Linux?

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

我也调查了(并尝试使用)wineg++,但它在编译时似乎没有任何改变.

我该怎么办这个问题?

含义:通常的做法是在Windows VC上开发然后移植到Linux?如果是这样,是否有确保一切顺利的标准方法?或者只是了解Linux上的编译器如何正常工作和编码,以便不会发生错误?

最好是一种解决方案,允许我在Windows上继续开发,并在完成后简单地将所有内容移植到Linux上.如果可能的话,尝试尽可能简单地做出任何答案,当涉及到大部分内容时,我仍然非常业余.

编辑:我还想提一下,我并没有真正使用任何疯狂的库.只是math.h和矢量.

一些错误的例子是:

使用一些双精度初始化矢量:

enter image description here

相应的编译错误:

enter image description here

解决方法

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

事情是,虽然他们都工作,但他们这样做有点不同.大多数情况下,它可能需要显式覆盖,这是不同的默认设置.举个例子:

> Visual Studio总是根据他们支持的最新C标准进行编译,并且不允许您使用不同的标准.在最新版本中,我认为它几乎是C 11和C 14之间的混合.
> 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.

(编辑:李大同)

【声明】本站内容均来自网络,其相关言论仅代表作者个人观点,不代表本站立场。若无意侵犯到您的权利,请及时与联系站长删除相关内容!

    推荐文章
      热点阅读