Предупреждения при сборке Ракудо в Windows
Я следовал инструкциям по сборке Rakudo
здесь. С похожим чтением здесь и здесь я попытался создать его в Windows с помощью VS-2019.
Однако при строительстве Rakudo
в windows я получаю следующие предупреждения сборки:
Updating submodules .................................... OK
Configuring native build environment ...................
trying to compile a simple C program ............... YES
did not find libzstd; will not use heap snapshot format version 3
OK
...
src\io\syncfile.c(272): warning C4312: 'type cast': conversion from 'int' to 'HANDLE' of greater size
src\io\syncfile.c(334): warning C4312: 'type cast': conversion from 'int' to 'HANDLE' of greater size
...
src\io\signals.c(115): warning C4068: unknown pragma
src\io\signals.c(116): warning C4068: unknown pragma
src\io\signals.c(120): warning C4068: unknown pragma
...
src\platform\random.c(132): warning C4113: 'FARPROC' differs in parameter lists from 'CRYPTGENRANDOM'
src\platform\random.c(132): warning C4133: '=': incompatible types - from 'FARPROC' to 'CRYPTGENRANDOM'
src\platform\random.c(130): warning C4113: 'FARPROC' differs in parameter lists from 'CRYPTACQUIRECONTEXTA'
src\platform\random.c(130): warning C4133: 'initializing': incompatible types - from 'FARPROC' to 'CRYPTACQUIRECONTEXTA'
...
src\platform\win32\io.c(27): warning C4312: 'type cast': conversion from 'int' to 'HANDLE' of greater size
src\platform\win32\io.c(116): warning C4312: 'type cast': conversion from 'int' to 'HANDLE' of greater size
...
cl : Command line warning D9035 : option 'o' has been deprecated and will be removed in a future release
cl : Command line warning D9002 : ignoring unknown option '-lm'
minilua.c
...
src\jit\x64\emit.c(8): warning C4129: 'j': unrecognized character escape sequence
src\jit\x64\emit.c(8): warning C4129: 'e': unrecognized character escape sequence
srcjitdemit.dasc(4): warning C4068: unknown pragma
srcjitdemit.dasc(5): warning C4068: unknown pragma
srcjitdemit.dasc(7): warning C4068: unknown pragma
srcjitdemit.dasc(8): warning C4068: unknown pragma
src/jit/x64/tiles.dasc(2): warning C4068: unknown pragma
...
В приведенном выше блоке кода показаны только предупреждения. Полный журнал представлен здесь.
Система, используемая для сборки: Appveyor с VS-2019 в Windows
Конфигурация:
## Appveyor configuration for Rakudo
# Manually build and don't use MSVC's build process so disable it
build: off
platform:
- x64
install:
- '"C:\Program Files (x86)\Microsoft Visual Studio\2019\Community\VC\Auxiliary\Build\vcvars64.bat"'
# install zstd
- choco install zstandard
- SET PATH=C:\strawberry\c\bin;C:\strawberry\perl\site\bin;C:\strawberry\perl\bin;%PATH%
- perl Configure.pl --gen-moar --gen-nqp --backends=moar --prefix=%APPVEYOR_BUILD_FOLDER%\raku
- nmake
- nmake install
environment:
matrix:
- APPVEYOR_BUILD_WORKER_IMAGE: Visual Studio 2019
branches:
only:
- master
- Хотя я установил
zstandard
( https://github.com/facebook/zstd) от шоколадного, почему я получаю.. did not find libzstd; will not use heap snapshot format version 3
- Безобидны ли эти предупреждения (кроме zstd) во время сборки, которые я могу игнорировать? Или мне стоит беспокоиться?
- Есть ли способ избавиться от этих предупреждений?
1 ответ
Я быстро взглянул:
Предупреждение о conversion from 'int' to 'HANDLE' of greater size
вероятно, из-за отсутствия #include <io.h>
, что приводит к предположению компилятором, что _get_osfhandle()
возвращается int
вместо того intptr_t
. Это потенциально ошибка (хотя она может не проявляться на практике в зависимости от диапазона значений, которые окна фактически возвращают из этой функции).
Предупреждения о 'FARPROC' differs in parameter lists
связаны с отсутствием приведений из универсального указателя, возвращаемого GetProcAddress()
к конкретному типу. Однако, поскольку все типы указателей имеют совместимое представление, при игнорировании ничего плохого не произойдет.
Предупреждения о прагмах также можно игнорировать, и их можно подавить с помощью разумного использования #ifdef __GNUC__
.
Предупреждения о unrecognized character escape sequence
связаны с неправильным экранированием обратных косых черт в путях в сгенерированном коде. Должно быть исправлено, но также можно игнорировать.
Что касается zstd, сценарий конфигурации используетpkg-config
чтобы найти библиотеку, поэтому нет поддержки Windows. Кто-то должен это исправить. Однако я считаю, что это повлияет только на профилировщик, а не на обычную работу MoarVM.
Я не исследовал Command line warning
материал, хотя похоже, что что-то думает, что он компилируется в системе *nix и, следовательно, передает неправильные флаги. Должен быть исправлен, но не может нарушить сборку.