G++ 导致“type_traits.h”和其他包含文件中的结构重新定义错误

G++ 导致“type_traits.h”和其他包含文件中的结构重新定义错误

我“被委托”尝试在我们较新的平台上构建旧软件(实际上,非常旧的软件,自 2014 年以来就没有编译过),具体来说是在 Ubuntu 20.04 中使用 g++ 9.4.0。在执行此操作时,我遇到了许多错误,所有这些错误都发生在“/usr/include/c++/9”中的一些包含文件中。有问题的文件是类型特征.h位/分配器.h位/basic_string.h, 和位/alloc_traits.h

构建输出如下所示:

make -C /home/schudall/TDWR_Appl_LocalUB/csci04/csc25
make[1]: Entering directory '/home/schudall/TDWR_Appl_LocalUB/csci04/csc25'
/usr/bin/g++ -c -I/home/schudall/TDWR_Appl_LocalUB/csci04/csc20 -I/home/schudall/TDWR_Appl_LocalUB/csci04/csc25  -Dvolatile= -O2 -Di586 -Wall -Wno-unused -DWX_MULTITHREADED -D_REENTRANT WxBase.C -o LINUX/WxBase.o
In file included from /usr/include/c++/9/bits/move.h:55,
                 from /usr/include/c++/9/bits/nested_exception.h:40,
                 from /usr/include/c++/9/exception:144,
                 from /usr/include/c++/9/ios:39,
                 from /usr/include/c++/9/ostream:38,
                 from /usr/include/c++/9/iostream:39,
                 from WxBase.C:33:
/usr/include/c++/9/type_traits:506:12: error: redefinition of ‘struct std::is_function<_Res(_ArgTypes ...)>’
  506 |     struct is_function<_Res(_ArgTypes...) volatile _GLIBCXX_NOEXCEPT_QUAL>
      |            ^~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~

/usr/include/c++/9/type_traits:458:12: note: previous definition of ‘struct std::is_function<_Res(_ArgTypes ...)>’
  458 |     struct is_function<_Res(_ArgTypes...) _GLIBCXX_NOEXCEPT_QUAL>
      |            ^~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~

这只是许多其他类似错误被指出的一个例子。

披露要点:虽然我有几年的 C++ 编程经验,但我的大部分经验都是将旧代码转移到我们的系统中。我的 C++ 培训可以追溯到大约 20-25 年前(ANSI 之前?)。此外,我对 Ubuntu 环境还比较陌生。

综上所述,看起来我可能没有包括这些文件所需的内容,或者没有向编译器传递正确的参数,或者我可能没有安装在该设备上构建所需的所有库。或者代码已经过时了,但我不知道从哪里开始清理这些错误。阅读手册页没有帮助 :(

我想问的是,是否有人比我拥有更深厚(和更新)的经验基础,可以给我指明正确的方向,并告诉我需要做些什么来解决这些问题?提前谢谢您!

相关内容