我“被委托”尝试在我们较新的平台上构建旧软件(实际上,非常旧的软件,自 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 环境还比较陌生。
综上所述,看起来我可能没有包括这些文件所需的内容,或者没有向编译器传递正确的参数,或者我可能没有安装在该设备上构建所需的所有库。或者代码已经过时了,但我不知道从哪里开始清理这些错误。阅读手册页没有帮助 :(
我想问的是,是否有人比我拥有更深厚(和更新)的经验基础,可以给我指明正确的方向,并告诉我需要做些什么来解决这些问题?提前谢谢您!