Установка FFI-Platypus на Strawberry Perl 5.28.1 - PullRequest
0 голосов
/ 20 марта 2019

Когда я пытаюсь установить FFI :: Platypus на straweberry perl 5.28.1, я получаю сообщение ниже.Любая идея, что может быть не так?

xs/windl.o:windl.c:(.text+0x12c): undefined reference to `EnumProcessModules'
xs/windl.o:windl.c:(.text+0x185): undefined reference to `GetModuleFileNameExA'
collect2.exe: error: ld returned 1 exit status
gmake: *** [Makefile:529: blib\arch\auto\FFI\Platypus\Platypus.xs.dll] Error 1
  PLICEASE/FFI-Platypus-0.86.tar.gz
  "C:\Dev\OpenSource Tools\Perl\strawberry-perl-5.28.1.1-64bit-portable\c\bin\gmake.exe" -- NOT OK
Stopping: 'install' failed for 'FFI::Platypus'.
Failed during this command:
 PLICEASE/FFI-Platypus-0.86.tar.gz            : make NO

также здесь приведены шаги компоновщика при установке

gcc -c  -Iinclude -IC:/Dev/OPENSO~1/Perl/STRAWB~1.1-6/c/lib/PKGCON~1/../../include \
-s -O2 -DWIN32 -DWIN64 -DCONSERVATIVE -D__USE_MINGW_ANSI_STDIO -DPERL_TEXTMODE_SCRIPTS -DPERL_IMPLICIT_CONTEXT -DPERL_IMPLICIT_SYS -DUSE_PERLIO -fwrapv -fno-strict-aliasing -mms-bitfields -s -O2 \
  -DVERSION=\"0.86\" \
-DXS_VERSION=\"0.86\"  "-IC:\Dev\OpenSource Tools\Perl\strawberry-perl-5.28.1.1-64bit-portable\perl\lib\CORE"   lib/FFI/Platypus.c -o lib/FFI/Platypus.o
gcc -c  -Iinclude -IC:/Dev/OPENSO~1/Perl/STRAWB~1.1-6/c/lib/PKGCON~1/../../include -s -O2 -DWIN32 -DWIN64 -DCONSERVATIVE -D__USE_MINGW_ANSI_STDIO -DPERL_TEXTMODE_SCRIPTS -DPERL_IMPLICIT_CONTEXT -DPERL_IMPLICIT_SYS -DUSE_PERLIO -fwrapv -fno-strict-aliasing -mms-bitfields -s -O2   -DVERSION=\"0.86\" -DXS_VERSION=\"0.86\"  "-IC:\Dev\OpenSource Tools\Perl\strawberry-perl-5.28.1.1-64bit-portable\perl\lib\CORE"   xs/closure.c -o xs/closure.o
gcc -c  -Iinclude -IC:/Dev/OPENSO~1/Perl/STRAWB~1.1-6/c/lib/PKGCON~1/../../include -s -O2 -DWIN32 -DWIN64 -DCONSERVATIVE -D__USE_MINGW_ANSI_STDIO -DPERL_TEXTMODE_SCRIPTS -DPERL_IMPLICIT_CONTEXT -DPERL_IMPLICIT_SYS -DUSE_PERLIO -fwrapv -fno-strict-aliasing -mms-bitfields -s -O2   -DVERSION=\"0.86\" -DXS_VERSION=\"0.86\"  "-IC:\Dev\OpenSource Tools\Perl\strawberry-perl-5.28.1.1-64bit-portable\perl\lib\CORE"   xs/complex.c -o xs/complex.o
gcc -c  -Iinclude -IC:/Dev/OPENSO~1/Perl/STRAWB~1.1-6/c/lib/PKGCON~1/../../include -s -O2 -DWIN32 -DWIN64 -DCONSERVATIVE -D__USE_MINGW_ANSI_STDIO -DPERL_TEXTMODE_SCRIPTS -DPERL_IMPLICIT_CONTEXT -DPERL_IMPLICIT_SYS -DUSE_PERLIO -fwrapv -fno-strict-aliasing -mms-bitfields -s -O2   -DVERSION=\"0.86\" -DXS_VERSION=\"0.86\"  "-IC:\Dev\OpenSource Tools\Perl\strawberry-perl-5.28.1.1-64bit-portable\perl\lib\CORE"   xs/custom.c -o xs/custom.o
gcc -c  -Iinclude -IC:/Dev/OPENSO~1/Perl/STRAWB~1.1-6/c/lib/PKGCON~1/../../include -s -O2 -DWIN32 -DWIN64 -DCONSERVATIVE -D__USE_MINGW_ANSI_STDIO -DPERL_TEXTMODE_SCRIPTS -DPERL_IMPLICIT_CONTEXT -DPERL_IMPLICIT_SYS -DUSE_PERLIO -fwrapv -fno-strict-aliasing -mms-bitfields -s -O2   -DVERSION=\"0.86\" -DXS_VERSION=\"0.86\"  "-IC:\Dev\OpenSource Tools\Perl\strawberry-perl-5.28.1.1-64bit-portable\perl\lib\CORE"   xs/havepm.c -o xs/havepm.o
gcc -c  -Iinclude -IC:/Dev/OPENSO~1/Perl/STRAWB~1.1-6/c/lib/PKGCON~1/../../include -s -O2 -DWIN32 -DWIN64 -DCONSERVATIVE -D__USE_MINGW_ANSI_STDIO -DPERL_TEXTMODE_SCRIPTS -DPERL_IMPLICIT_CONTEXT -DPERL_IMPLICIT_SYS -DUSE_PERLIO -fwrapv -fno-strict-aliasing -mms-bitfields -s -O2   -DVERSION=\"0.86\" -DXS_VERSION=\"0.86\"  "-IC:\Dev\OpenSource Tools\Perl\strawberry-perl-5.28.1.1-64bit-portable\perl\lib\CORE"   xs/meta.c -o xs/meta.o
gcc -c  -Iinclude -IC:/Dev/OPENSO~1/Perl/STRAWB~1.1-6/c/lib/PKGCON~1/../../include -s -O2 -DWIN32 -DWIN64 -DCONSERVATIVE -D__USE_MINGW_ANSI_STDIO -DPERL_TEXTMODE_SCRIPTS -DPERL_IMPLICIT_CONTEXT -DPERL_IMPLICIT_SYS -DUSE_PERLIO -fwrapv -fno-strict-aliasing -mms-bitfields -s -O2   -DVERSION=\"0.86\" -DXS_VERSION=\"0.86\"  "-IC:\Dev\OpenSource Tools\Perl\strawberry-perl-5.28.1.1-64bit-portable\perl\lib\CORE"   xs/names.c -o xs/names.o
gcc -c  -Iinclude -IC:/Dev/OPENSO~1/Perl/STRAWB~1.1-6/c/lib/PKGCON~1/../../include -s -O2 -DWIN32 -DWIN64 -DCONSERVATIVE -D__USE_MINGW_ANSI_STDIO -DPERL_TEXTMODE_SCRIPTS -DPERL_IMPLICIT_CONTEXT -DPERL_IMPLICIT_SYS -DUSE_PERLIO -fwrapv -fno-strict-aliasing -mms-bitfields -s -O2   -DVERSION=\"0.86\" -DXS_VERSION=\"0.86\"  "-IC:\Dev\OpenSource Tools\Perl\strawberry-perl-5.28.1.1-64bit-portable\perl\lib\CORE"   xs/perl_math_int64.c -o xs/perl_math_int64.o
gcc -c  -Iinclude -IC:/Dev/OPENSO~1/Perl/STRAWB~1.1-6/c/lib/PKGCON~1/../../include -s -O2 -DWIN32 -DWIN64 -DCONSERVATIVE -D__USE_MINGW_ANSI_STDIO -DPERL_TEXTMODE_SCRIPTS -DPERL_IMPLICIT_CONTEXT -DPERL_IMPLICIT_SYS -DUSE_PERLIO -fwrapv -fno-strict-aliasing -mms-bitfields -s -O2   -DVERSION=\"0.86\" -DXS_VERSION=\"0.86\"  "-IC:\Dev\OpenSource Tools\Perl\strawberry-perl-5.28.1.1-64bit-portable\perl\lib\CORE"   xs/record_opaque.c -o xs/record_opaque.o
gcc -c  -Iinclude -IC:/Dev/OPENSO~1/Perl/STRAWB~1.1-6/c/lib/PKGCON~1/../../include -s -O2 -DWIN32 -DWIN64 -DCONSERVATIVE -D__USE_MINGW_ANSI_STDIO -DPERL_TEXTMODE_SCRIPTS -DPERL_IMPLICIT_CONTEXT -DPERL_IMPLICIT_SYS -DUSE_PERLIO -fwrapv -fno-strict-aliasing -mms-bitfields -s -O2   -DVERSION=\"0.86\" -DXS_VERSION=\"0.86\"  "-IC:\Dev\OpenSource Tools\Perl\strawberry-perl-5.28.1.1-64bit-portable\perl\lib\CORE"   xs/record_simple.c -o xs/record_simple.o
gcc -c  -Iinclude -IC:/Dev/OPENSO~1/Perl/STRAWB~1.1-6/c/lib/PKGCON~1/../../include -s -O2 -DWIN32 -DWIN64 -DCONSERVATIVE -D__USE_MINGW_ANSI_STDIO -DPERL_TEXTMODE_SCRIPTS -DPERL_IMPLICIT_CONTEXT -DPERL_IMPLICIT_SYS -DUSE_PERLIO -fwrapv -fno-strict-aliasing -mms-bitfields -s -O2   -DVERSION=\"0.86\" -DXS_VERSION=\"0.86\"  "-IC:\Dev\OpenSource Tools\Perl\strawberry-perl-5.28.1.1-64bit-portable\perl\lib\CORE"   xs/record_string.c -o xs/record_string.o
gcc -c  -Iinclude -IC:/Dev/OPENSO~1/Perl/STRAWB~1.1-6/c/lib/PKGCON~1/../../include -s -O2 -DWIN32 -DWIN64 -DCONSERVATIVE -D__USE_MINGW_ANSI_STDIO -DPERL_TEXTMODE_SCRIPTS -DPERL_IMPLICIT_CONTEXT -DPERL_IMPLICIT_SYS -DUSE_PERLIO -fwrapv -fno-strict-aliasing -mms-bitfields -s -O2   -DVERSION=\"0.86\" -DXS_VERSION=\"0.86\"  "-IC:\Dev\OpenSource Tools\Perl\strawberry-perl-5.28.1.1-64bit-portable\perl\lib\CORE"   xs/windl.c -o xs/windl.o
"C:\Dev\OpenSource Tools\Perl\strawberry-perl-5.28.1.1-64bit-portable\perl\bin\perl.exe" -MExtUtils::Mksymlists \
     -e "Mksymlists('NAME'=>\"FFI::Platypus\", 'DLBASE' => 'Platypus', 'DL_FUNCS' => {  }, 'FUNCLIST' => [], 'IMPORTS' => {  }, 'DL_VARS' => [], 'FILE' => q[lib/FFI/Platypus]);"
g++.exe lib/FFI/Platypus.def -o blib\arch\auto\FFI\Platypus\Platypus.xs.dll -LC:/Dev/OPENSO~1/Perl/STRAWB~1.1-6/c/lib/PKGCON~1/../../lib/../lib -mdll -s -L"C:\Dev\OpenSource Tools\Perl\strawberry-perl-5.28.1.1-64bit-portable\perl\lib\CORE" -L"C:\Dev\OpenSource Tools\Perl\strawberry-perl-5.28.1.1-64bit-portable\c\lib" lib/FFI/Platypus.o xs/closure.o xs/complex.o xs/custom.o xs/havepm.o xs/meta.o xs/names.o xs/perl_math_int64.o xs/record_opaque.o xs/record_simple.o xs/record_string.o xs/windl.o   "C:\Dev\OpenSource Tools\Perl\strawberry-perl-5.28.1.1-64bit-portable\perl\lib\CORE\libperl528.a" "C:\Dev\OPENSO~1\Perl\STRAWB~1.1-6\c\lib\PKGCON~1\..\..\lib\..\lib\libffi.a" -Wl,--enable-auto-image-base

1 Ответ

2 голосов
/ 20 марта 2019

Из сообщения об ошибке компоновщика (пропущенные символы EnumProcessModules и GetModuleFileNameExA, которые являются функциями Windows API) ясно, что библиотека kernel32 отсутствует.Командная строка компоновщика, показанная в вашем обновлении, доказывает, что.

Обновление также показывает, что вы установили Strawberry Perl по пути, который содержит пробелы:

"C:\Dev\OpenSource Tools\Perl\strawberry-perl-5.28.1.1-64bit-portable\...

Использование путей с символами, которые имеют специальныезначения, такие как пробел (), хеш (#) и т. д., всегда вызывают проблемы.В данном конкретном случае это приводит к сборке, которая не может найти никаких библиотек:

...
Configuring FFI-Platypus-0.86 ... using system libffia via PkgConfigPP
Checking if your kit is complete...
Looks good
Warning (mostly harmless): No library found for -lpsapi
Warning (mostly harmless): No library found for -lmoldname
Warning (mostly harmless): No library found for -lkernel32
Warning (mostly harmless): No library found for -luser32
Warning (mostly harmless): No library found for -lgdi32
Warning (mostly harmless): No library found for -lwinspool
Warning (mostly harmless): No library found for -lcomdlg32
Warning (mostly harmless): No library found for -ladvapi32
Warning (mostly harmless): No library found for -lshell32
Warning (mostly harmless): No library found for -lole32
Warning (mostly harmless): No library found for -loleaut32
Warning (mostly harmless): No library found for -lnetapi32
Warning (mostly harmless): No library found for -luuid
Warning (mostly harmless): No library found for -lws2_32
Warning (mostly harmless): No library found for -lmpr
Warning (mostly harmless): No library found for -lwinmm
Warning (mostly harmless): No library found for -lversion
Warning (mostly harmless): No library found for -lodbc32
Warning (mostly harmless): No library found for -lodbccp32
Warning (mostly harmless): No library found for -lcomctl32
Generating a gmake-style Makefile
...

К сожалению, предупреждение не является "в основном безвредным", поскольку приводит к командной строке компоновщика без, например, -lkernel32 иотсюда ошибка компоновщика.

Решение : переименуйте каталоги в пути, чтобы удалить любые пробелы, например

C:\Dev\OpenSource_Tools\...

Исходный ответ Проект github для FFI :: Platypus показывает, что автор выполняет сборку CI для Strawberry Perl .Поэтому нужно проверить, следуя инструкциям сборки в этой сборке CI:

cpanm Capture::Tiny ExtUtils::MakeMaker ExtUtils::ParseXS IPC::Cmd
cpanm FFI::Platypus

Вы также можете сравнить свой журнал сборки с одной из сборок FFI :: Platypus CI в AppVeyor. чтобы обнаружить различия.

...