Clang не знает PTRDIFF_MAX? - PullRequest
       20

Clang не знает PTRDIFF_MAX?

0 голосов
/ 13 июля 2020

Я обновляю нашу машину сборки (с 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 есть недокументированная зависимость, что вы должны выполнить этот импорт самостоятельно, что говорит о том, что я делаю что-то не так. Кто-нибудь знает, что, пожалуйста?

РЕДАКТИРОВАТЬ: Явное включение C ++ 17 в cmake (и оттуда в 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 из, так что я думаю, это отвлекающий маневр (а также не исправление: - /).

1 Ответ

0 голосов
/ 17 июля 2020

Оказалось, что в моем пути включения была версия stdint.h, в которой указано, что он предназначен для использования «только с компиляторами Microsoft Visual C ++!». Неудивительно, что с Clang это не работает. Вы ожидаете, что он либо катастрофически выйдет из строя, либо все равно будет работать (он действительно определяет PTRDIFF_MAX), но я думаю, это просто очень сильно запутает Clang.

В любом случае, если я удалю его из своего пути включения , все начинает работать.

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...