Ошибка установки Perl на Win10 с использованием MinGW

Если это неправильное место для этого вопроса, я прошу прощения и перенаправьте меня в подходящий раздел.

Я немного заржавел при установке из командной строки, особенно в Windows. Я решил установить последнюю версию Perl на свой ПК, работающий под Windows 10. Ранее я устанавливал ее с помощью загрузки Strawberry Perl, но, поскольку это было несколько версий, я решил удалить ее и обновить свои навыки (ха) с помощью установить его вручную. Я скачал последний выпуск Perl с https://www.perl.org/get.html и читал README.win32, чтобы убедиться, что я правильно его установил.

Поскольку мне нужен компилятор, я решил использовать Gcc и dmake. Я установил и могу запустить их успешно, поэтому вернулся к установке Perl. В соответствии с инструкциями я попытался запустить dmake в подкаталоге win32 в папке загрузки Perl. До этого я редактировал makefile.mkгде эти переменные не комментируются в разделе конфигурации сборки:

INST_DRV/INST_TOP (left as is)
INST_VER *= \5.26.0
USE_MULTI *= define
USE_ITHREADS *= define
USE_IMP_SYS *= define
USE_LARGE_FILES *= define
USE_64_BIT_INT *= define
USE_LONG_DOUBLE *= define
DEFAULT_INC_EXCLUDES_DOT *= define
CCTYPE = GCC
GCCWRAPV *=define
CCHOME *= C:\MinGW
(nothing else changed after this)

Когда я бегу dmake в каталоге, это быстро приходит к этой ошибке:

gcc -c  -I.\include -I. -I.. -DWIN32 -DPERLDLL -DPERL_CORE -s -O2 -
D__USE_MINGW_ANSI_STDIO -fwrapv -fno-strict-aliasing
-DPERL_EXTERNAL_GLOB -DPERL_IS_MINIPERL -omini\toke.o  ..\toke.c
In file included from ..\perl.h:3220:0,
                 from ..\toke.c:40:
./win32.h:417:13: error: conflicting types for 'mkstemp'
 extern  int mkstemp(const char *path);
             ^~~~~~~
In file included from ..\perl.h:790:0,
                 from ..\toke.c:40:
c:\mingw\include\stdlib.h:809:30: note: previous definition of 'mkstemp' was here
 __cdecl __MINGW_NOTHROW  int mkstemp (char *__filename_template)
                              ^~~~~~~
In file included from ..\toke.c:40:0:
..\toke.c: In function 'Perl_filter_add':
..\perl.h:1756:20: warning: cast from pointer to integer of different size [-Wpointer-to-int-cast]
 #define PTR2nat(p) (PTRV)(p) /* pointer to integer of PTRSIZE */
                    ^
..\perl.h:1769:28: note: in expansion of macro 'PTR2nat'
 #define FPTR2DPTR(t,p) ((t)PTR2nat(p)) /* function pointer to data pointer */
                            ^~~~~~~
..\toke.c:4397:21: note: in expansion of macro 'FPTR2DPTR'
     IoANY(datasv) = FPTR2DPTR(void *, funcp); /* stash funcp into spare field */
                     ^~~~~~~~~
..\perl.h:1769:25: warning: cast to pointer from integer of different size [-Wint-to-pointer-cast]
 #define FPTR2DPTR(t,p) ((t)PTR2nat(p)) /* function pointer to data pointer */
                         ^
..\toke.c:4397:21: note: in expansion of macro 'FPTR2DPTR'
     IoANY(datasv) = FPTR2DPTR(void *, funcp); /* stash funcp into spare field */
                     ^~~~~~~~~
..\toke.c: In function 'Perl_filter_del':
..\perl.h:1756:20: warning: cast from pointer to integer of different size [-Wpointer-to-int-cast]
 #define PTR2nat(p) (PTRV)(p) /* pointer to integer of PTRSIZE */
                    ^
..\perl.h:1769:28: note: in expansion of macro 'PTR2nat'
 #define FPTR2DPTR(t,p) ((t)PTR2nat(p)) /* function pointer to data pointer */
                            ^~~~~~~
..\toke.c:4463:26: note: in expansion of macro 'FPTR2DPTR'
     if (IoANY(datasv) == FPTR2DPTR(void *, funcp)) {
                          ^~~~~~~~~
..\perl.h:1769:25: warning: cast to pointer from integer of different size [-Wint-to-pointer-cast]
 #define FPTR2DPTR(t,p) ((t)PTR2nat(p)) /* function pointer to data pointer */
                         ^
..\toke.c:4463:26: note: in expansion of macro 'FPTR2DPTR'
     if (IoANY(datasv) == FPTR2DPTR(void *, funcp)) {
                          ^~~~~~~~~
..\toke.c: In function 'Perl_filter_read':
..\perl.h:1756:20: warning: cast from pointer to integer of different size [-Wpointer-to-int-cast]
 #define PTR2nat(p) (PTRV)(p) /* pointer to integer of PTRSIZE */
                    ^
..\perl.h:1768:28: note: in expansion of macro 'PTR2nat'
 #define DPTR2FPTR(t,p) ((t)PTR2nat(p)) /* data pointer to function pointer */
                            ^~~~~~~
..\toke.c:4554:13: note: in expansion of macro 'DPTR2FPTR'
     funcp = DPTR2FPTR(filter_t, IoANY(datasv));
             ^~~~~~~~~
..\perl.h:1768:25: warning: cast to pointer from integer of different size [-Wint-to-pointer-cast]
 #define DPTR2FPTR(t,p) ((t)PTR2nat(p)) /* data pointer to function pointer */
                         ^
..\toke.c:4554:13: note: in expansion of macro 'DPTR2FPTR'
     funcp = DPTR2FPTR(filter_t, IoANY(datasv));
             ^~~~~~~~~
In file included from ..\perl.h:5644:0,
                 from ..\toke.c:40:
..\toke.c: In function 'S_pending_ident':
..\perl.h:1734:26: warning: cast to pointer from integer of different size [-Wint-to-pointer-cast]
 #  define INT2PTR(any,d) (any)(d)
                          ^
..\embed.h:427:59: note: in definition of macro 'newUNOP_AUX'
 #define newUNOP_AUX(a,b,c,d) Perl_newUNOP_AUX(aTHX_ a,b,c,d)
                                                           ^
..\toke.c:8912:37: note: in expansion of macro 'INT2PTR'
                                     INT2PTR(UNOP_AUX_item *,
                                     ^~~~~~~

Я заранее получаю кучу предупреждений о приведении от указателей к целым числам разных размеров, но это бит, где он останавливается и выдает ошибку. Я что-то упускаю из виду? Я не делал этого некоторое время, поэтому я надеюсь, что это глупая ошибка пользователя с моей стороны! Благодарю.

1 ответ

Попробуйте получить исходные пакеты MinGW и установить их, используя makepkg-mingw.

Большинство, если не все, патчи применяются для настройки (или исправления) их для среды MSYS2/MinGW.

Исходный код, скачанный с его автора, может не скомпилироваться напрямую в этой среде, как в Linux или OS X с использованием "configure" и "make".

Инструкции доступны, и могут быть другие подобные инструкции, связанные с Arch Linux.

Другие вопросы по тегам