【问题标题】:Migrating GCC from 4.1.2 to 6.2.0 and from RHEL 5.5 to CentOS 7.2将 GCC 从 4.1.2 迁移到 6.2.0 以及从 RHEL 5.5 迁移到 CentOS 7.2
【发布时间】:2017-01-25 05:43:45
【问题描述】:

我有 GCC 4.1.2 的 RHEL,并且我的 C++ 代码正在按预期编译。但是当我尝试使用 GCC 6.2.0 在 CentOS 7.2 上编译时,相同的代码会失败并出现以下错误:

compiling UpcSummarization.o ...
UpcSummarization.cpp: In member function âvoid UpcSummarization::LoadUpcList(std::__cxx11::string)â:
UpcSummarization.cpp:480:40: error: âmemsetâ was not declared in this scope
         memset(&pBuffer, 0, sizeof(100));
                                        ^

我包含以下头文件:

string

如果我包含string.hcstring,它将通过。

知道如何使其仅使用 string 包含文件吗?迁移代码库以包含 string.hcstring 不是一种选择

编辑

是的,它是字符串。

也许我应该将其表述为 second option 而不是 not an option

在开始代码迁移之前,我需要排除编译器选项使其按原样工作的任何可能性。

如果需要,我可以安装额外的库并更改其编译方式。没有实际编辑代码。

【问题讨论】:

  • 好吧,memsetcstring 中。为什么不包括正确的标题?!
  • 无关,但你确定sizeof(100) 是你需要的吗?
  • @Biffen,我不确定我的编译方式是否正确。并且不确定我是否应该真正更改代码。由于它适用于旧版本的 OS 和 GCC,我需要了解可以通过更改其编译方式来修复它。
  • @KrishSanj 它可能适用于早期版本,因为某些标头碰巧包含其他标头。这并不意味着它是正确的。然而,正确的是,当你想使用memset(或者,可以说,停止使用memset)时包含cstring
  • @KrishSanj “实际上没有编辑代码”——在这种情况下,您很可能无法移植到 6.2,抱歉。

标签: c++ gcc string.h


【解决方案1】:

我包括以下头文件: 刺痛

字符串?

知道如何让它只使用字符串包含文件吗?

您可以创建一个虚拟的string 文件并将其与其他标题一起存储。例如,在string 内部进行操作

#include <string.h>

迁移代码库以包含 string.h 或 cstring 不是一种选择

请注意,如果您无法对代码进行这么小的修改,您很可能无法将代码移植到 6.2。 4.1 和 6.2 相隔 10 年,因此您的代码肯定需要更改/修复才能与较新的编译器一起使用。

【讨论】:

  • @KrishSanj 如果您可以修复代码以使用string.h,那当然是首选。
  • 在 C++ 中使用 cstring,而不是 string.h
  • @Biffen 这样做有什么特别的好处吗?
  • 我试图找到一个来源,但它似乎比我想象的更值得商榷。无论如何,here 的东西。
  • @yugr 和 符号保证在 std:: 命名空间中,因此更难意外引用错误的符号。
猜你喜欢
  • 1970-01-01
  • 2017-08-24
  • 1970-01-01
  • 2017-01-22
  • 1970-01-01
  • 1970-01-01
  • 2017-12-12
  • 2014-03-22
  • 1970-01-01
相关资源
最近更新 更多