【发布时间】:2020-07-13 14:54:55
【问题描述】:
我正在升级我们的构建机器(从 Windows Server 2008 到 Windows 10)并且构建在旧机器上运行良好(使用 Visual Studio)。我在新机器上使用 VS Build Tools 运行它时遇到了一些问题(我试图避免需要 VS 许可证),所以我将它移植到使用 Clang。
构建使用 Flatbuffers,我已从 1.4.0 升级到 1.12.0。在构建过程中出现以下错误:
[2/70] Building CXX object CMakeFiles\polyphemus.dir\hardwareconfig.cpp.obj
FAILED: CMakeFiles/polyphemus.dir/hardwareconfig.cpp.obj
C:\PROGRA~2\MICROS~1\2019\BUILDT~1\VC\Tools\Llvm\x64\bin\clang-cl.exe /nologo -TP -I"C:\Program Files (x86)\nanomsg\include\nanomsg" -I. -I"C:\Program Files (x86)\FlatBuffers\include" -IE:\JenkinsMIDEBLD\workspace\btaylor-new_build_node_CYC-268_2\polyphemus\include /DWIN32 /D_WINDOWS /GR /EHsc /Zi /Ob0 /Od /RTC1 -MDd /showIncludes /FoCMakeFiles\polyphemus.dir\hardwareconfig.cpp.obj /FdCMakeFiles\polyphemus.dir\polyphemus.pdb -c E:\JenkinsMIDEBLD\workspace\btaylor-new_build_node_CYC-268_2\polyphemus\hardwareconfig.cpp
In file included from E:\JenkinsMIDEBLD\workspace\btaylor-new_build_node_CYC-268_2\polyphemus\hardwareconfig.cpp:3:
In file included from .\hardwareconfig_generated.h:7:
In file included from C:\Program Files (x86)\FlatBuffers\include\flatbuffers/flatbuffers.h:20:
In file included from C:\Program Files (x86)\FlatBuffers\include\flatbuffers/base.h:45:
C:\Program Files (x86)\Microsoft Visual Studio\2019\BuildTools\VC\Tools\MSVC\14.26.28801\include\algorithm(37,63): error: use of undeclared identifier 'PTRDIFF_MAX'
return static_cast<ptrdiff_t>(_Min_value(static_cast<_CT>(PTRDIFF_MAX), static_cast<_CT>(_Value)));
没有定义 PTRDIFF_MAX 真的很奇怪,这表明 Flatbuffers 应该在其文件中完成 #include <cstdint>,但没有。这似乎会导致测试失败,所以我不敢相信这是一个未诊断的错误。果然,如果我将#include <cstdint> 添加到我的文件中,它们就会开始构建。不过,这似乎确实不是正确的解决方案-我无法相信 Flatbuffers 具有未记录的依赖项,您必须自己进行导入,这表明我做错了。请问有谁知道吗?
编辑:在 cmake 中显式打开 C++17(以及从那里在 clang 中)会在不涉及平面缓冲区的不同位置导致相同的错误:
In file included from E:\JenkinsMIDEBLD\workspace\btaylor-new_build_node_CYC-268_2\polyphemus\complexseries.cpp:2:
In file included from E:\JenkinsMIDEBLD\workspace\btaylor-new_build_node_CYC-268_2\polyphemus\include\polyphemus/complexseries.h:4:
In file included from C:\Program Files (x86)\Microsoft Visual Studio\2019\BuildTools\VC\Tools\MSVC\14.26.28801\include\complex:12:
In file included from C:\Program Files (x86)\Microsoft Visual Studio\2019\BuildTools\VC\Tools\MSVC\14.26.28801\include\sstream:11:
In file included from C:\Program Files (x86)\Microsoft Visual Studio\2019\BuildTools\VC\Tools\MSVC\14.26.28801\include\istream:11:
In file included from C:\Program Files (x86)\Microsoft Visual Studio\2019\BuildTools\VC\Tools\MSVC\14.26.28801\include\ostream:11:
In file included from C:\Program Files (x86)\Microsoft Visual Studio\2019\BuildTools\VC\Tools\MSVC\14.26.28801\include\ios:11:
In file included from C:\Program Files (x86)\Microsoft Visual Studio\2019\BuildTools\VC\Tools\MSVC\14.26.28801\include\xlocnum:16:
In file included from C:\Program Files (x86)\Microsoft Visual Studio\2019\BuildTools\VC\Tools\MSVC\14.26.28801\include\streambuf:11:
In file included from C:\Program Files (x86)\Microsoft Visual Studio\2019\BuildTools\VC\Tools\MSVC\14.26.28801\include\xiosbase:12:
In file included from C:\Program Files (x86)\Microsoft Visual Studio\2019\BuildTools\VC\Tools\MSVC\14.26.28801\include\system_error:14:
In file included from C:\Program Files (x86)\Microsoft Visual Studio\2019\BuildTools\VC\Tools\MSVC\14.26.28801\include\stdexcept:12:
C:\Program Files (x86)\Microsoft Visual Studio\2019\BuildTools\VC\Tools\MSVC\14.26.28801\include\xstring(1258,47): error: use of undeclared identifier 'PTRDIFF_MAX'
return _Min_value(static_cast<size_t>(PTRDIFF_MAX), static_cast<size_t>(-1) / sizeof(_Elem));
那是在我自己完成#include of 的文件中,所以我想这是一个红鲱鱼(也不是修复:-/)。
【问题讨论】:
-
请注意,实际错误来自标头
<algorithm>,这表明您的构建设置存在更根本性的错误,而不是 FlatBuffers 标头。 -
会不会是C++11没有启用?
-
我注意到了这一点,但错误似乎比 Flatbuffers 错误的可能性更小......
-
在 C++11 上... maaaybe?我认为我们之前的构建没有使用 C++11,因为我们使用的旧版本的 Visual Studio 编译器不支持它。不过,我看不到任何地方明确将其关闭。
-
这很奇怪。在 cmake 中显式打开 C++17(以及从那里在 clang 中)会在不同的地方导致相同的错误。这次在我自己包含 cstdint 的文件之一中。没有平面缓冲区,这次全部在 Visual Studio 中。