Почему я не могу установить SDL на какую-либо из моих портативных установок Perl в Windows? - PullRequest
0 голосов
/ 28 мая 2018

В школе нам сказали сделать частный проект на выбранном нами языке.Я выбрал perl, а для графики (обязательный компонент) выбрал SDL.

Ранее я установил portable-git, а git-bash поставлялся с perl.Ура!Это сработало!Давайте установим sdl!

cpan SDL

output:

Can't locate CPAN/Author.pm in @INC (you may need to install the CPAN::Author module)

Это смутило меня, особенно когда я получаю то же сообщение для cpan CPAN::Author.Поэтому я устанавливаю переносную версию strawberry-perl (школьные настройки безопасности компьютера запрещают установку программного обеспечения не администраторами), и я получаю другое сообщение об ошибке (после загрузки нескольких вещей):

Welcome to Alien::SDL module installation                                                                               
-----------------------------------------                                                                                 
checking operating system... MSWin32                                                                                    
checking for gcc... yes                                                                                                 
checking build system type... MSWin32-x64-multi-thread                                                                  
checking platform specific module... using 'My::Builder::Windows'                                                       
checking SDL_INST_DIR env var... no                                                                                     
checking for config script... no                                                                                        
checking for prebuilt binaries... no                                                                                                                                                                                                            
You have the following options:                                                                                         
[1] Quit installation                                                                                                                                                                                                                           
What way do you wanna go? [1 ]1                                                                                         
No 'Build' created  FROGGS/Alien-SDL-1.446.tar.gz                                                                         
C:\Users\gardner.mark.INFOLAB\Downloads\strawberry-perl\perl\bin\perl.exe 
Build.PL -- NOT OK                          Stopping: 'install' failed for 
'Alien::SDL'. 

Я пробовал cpan Alien::SDL и использовал флаг -f для обеих команд, но все равно получаю одно и то же сообщение.Нужно ли устанавливать что-то еще или в чем проблема?

РЕДАКТИРОВАТЬ: как предложил @xxfelixxx, я успешно установил cpanm.Однако это дает следующий вывод с ошибкой (выделено жирным шрифтом):

--> Working on SDL                                                                                                      
Fetching http://www.cpan.org/authors/id/F/FR/FROGGS/SDL-2.548.tar.gz ... OK                                             
==> Found dependencies: Alien::SDL, Tie::Simple                                                                         
--> Working on Alien::SDL                                                                                               
Fetching http://www.cpan.org/authors/id/F/FR/FROGGS/Alien-SDL-1.446.tar.gz... OK
Configuring Alien-SDL-1.446 ... N/A                                                                                     
! Configure failed for Alien-SDL-1.446. See [...]\STRAWB~1\data\.cpanm\work\1527577290.7232\build.log for details.                                                                                                     
--> Working on Tie::Simple                                                                                             
Fetching http://www.cpan.org/authors/id/H/HA/HANENKAMP/Tie-Simple-1.04.tar.gz ... OK                                    
Configuring Tie-Simple-1.04 ... OK                                                                                      
Building and testing Tie-Simple-1.04 ... OK                                                                             
Successfully installed Tie-Simple-1.04                                                                                  
! Installing the dependencies failed: Module 'Alien::SDL' is not installed                                              
! Bailing out the installation for SDL-2.548.                                                                           
1 distribution installed 

Так что, как и ранее, Alien :: SDL не может сам себя настроить.

1 Ответ

0 голосов
/ 31 июля 2019

Короткий ответ на тему Starter:

И библиотека SDL 1.x, и Alien: модуль perl SDL, похоже, не поддерживается, все пошли на SDL2 и Alien :: SDL2

И вам тоже.

Я установил Strawberry 5.30 Win64, а затем решил явные проблемы с правами доступа к файлам / папкам, потому что я НЕ хочу запускать Perl или Perl игры от имени администратора.

  • d: \Strawberry \ cpan \
  • d: \ Strawberry \ perl \

Затем я просто выдал команду оболочки Windows cpan install Alien:SDL2 - и она установилась как чудо-шарм.

В качестве альтернативы представляется возможным установить Alien:SDL version 1, но для этого потребуется версия Strawberry Perl для Win32 / x86, а не версия для Win64 / x64.Но почему?Согласно http://yapgh.blogspot.com SDL v.1 не работает с марта 2013 года.


Просто добавляю больше деталей.
Это тоже пострадали ....
Мое желаниеэто просто запуск игры Frozen Bubbles на Win10 x64 box.
У меня есть некоторый опыт программирования, но не в Perl, и при этом у меня нет Perl IDE или чего-то еще.
Я не хочу никаких проблем с программированием на Perl, япросто хочу, чтобы игра запускалась.

Я зашел сюда из Google за тем же сообщением об ошибке, так что, возможно, это поможет и кому-то еще, кого Google, возможно, также отправит сюда.


Как я уже сказал, библиотека SDL 1.x и модуль Perl Alien: SDL не поддерживаются.

Однако игра FrozenBubble больше не поддерживается и работает только с SDL 1.x


CPAN-тестирование имеет следующую запись для Alien :: SDL в Windows: http://www.cpantesters.org/cpan/report/154af118-6c11-1014-a593-b7c73b50a26f

Известные вещи:

  • используется Strawberry 5.28.2, а не 5.30,
  • он использует x86 / Win32, а не x64 / Win63
  • он цитирует gccversion = '7.1.0' (Straberry 5.30 win64, кажется, имеет 8.3)

Так что, кажется, сводится к вопросу, является ли ABI для Win64 GCC 7.1 и 8.3 одинаковым или нет.


Кажется, ошибка вызвана этим файлом:

  • d: \ Strawberry \ cpan \ build \ Alien-SDL-1.446-0 \ inc \ My \ Utility.pm

У него есть $prebuilt_binaries массив, перечисляющий некоторые - что думаете?- встроенные библиотеки SDL 1.x.Он имеет 3 варианта для предустановленного Win32 SDL1.x и два варианта для Win64:

  • BEWARE: binaries are using old ABI параметр just for old strawberryperl 5.12.x/64bit и GCC 4.4.3
  • RECOMMENDED один для GCC gccversion_re => qr/^4\.(4\.[5-9]|[5-9]\.[0-9])$/
  • Примечание: отсутствует элемент версии GCC (нет проверки) для двоичных файлов библиотеки Win32!

Этот файл также имеет sub check_prebuilt_binaries, который проходит по массиву и пытается выполнитьсопоставить найденную среду Perl с этими критериями.

Во второй строке подпрограммы был закомментирован отладочный printf среды, подлежащей проверке (кроме GCC).Я удалил комментарий, переместился вверх и расширил его, включив GCC.

sub check_prebuilt_binaries
{
  print "(os=$^O cc=$cc archname=$Config{archname} gccVer=$Config{gccversion})\r\n";
  print "checking for prebuilt binaries... ";
  my @good = ();
  foreach my $b (@{$prebuilt_binaries}) {
    if ( ($^O =~ $b->{os_re}) &&
         ($Config{archname} =~ $b->{arch_re}) &&
         ($cc =~ $b->{cc_re}) &&
         (!defined $b->{gccversion_re} || $Config{gccversion} =~ $b->{gccversion_re})
        ) {
      $b->{buildtype} = 'use_prebuilt_binaries';
      push @good, $b;
    }
  }
  scalar(@good)
    ? print "yes, " . scalar(@good) . " option(s)\n"
    : print "no\n";
  #returning ARRAY of HASHREFs (sometimes more than one value)
  return \@good;
}

Затем я запускаю Perl Build, и вот что я получил:

d:\Strawberry\cpan\build\Alien-SDL-1.446-0>perl ./Build.PL
Welcome to Alien::SDL module installation
-----------------------------------------
checking operating system... MSWin32
checking for gcc... yes
checking build system type... MSWin32-x64-multi-thread
checking platform specific module... using 'My::Builder::Windows'
checking SDL_INST_DIR env var... no
checking for config script... no
(os=MSWin32 cc=gcc archname=MSWin32-x64-multi-thread gccVer=8.3.0)
checking for prebuilt binaries... no

You have the following options:
[1] Quit installation

What way do you wanna go? [1 ]1

Я не являюсьхороший regexper, но, как я вижу, версия GCC Win64 прикреплена к 4.4.5+ или 4.5.x - и версия 5.0+ не допускается.Вероятно, они не существовали, когда Alien:SDL был последний раз зафиксирован.


В примечаниях к выпуску GCC довольно часто упоминается изменение ABI по сравнению с x86-64, например:

и т. Д.

Какие конкретные изменения ABI в Win64 GCC могут иметь решающее значение для LibSDL?знать.Но из теста CPAN кажется, что, по крайней мере, изменения WinI ABI между GCC 4.5 и 7.1 были не такими уж плохими.В любом случае, компиляция SDL 1.x с использованием современного GCC из исходных кодов определенно превысила бы мои возможности.Итак, возьмите или оставьте это ...


Надеясь на хорошее, я только что удалил (закомментировал) тест версии GCC для "рекомендуемых" предварительно собранных двоичных файлов Win64 SDL1.

d:\Strawberry\cpan\build\Alien-SDL-1.446-0>perl ./Build.PL test
Welcome to Alien::SDL module installation
-----------------------------------------
checking operating system... MSWin32
checking for gcc... yes
checking build system type... MSWin32-x64-multi-thread
checking platform specific module... using 'My::Builder::Windows'
Too early to specify a build action 'test'.  Do 'Build test' instead.

d:\Strawberry\cpan\build\Alien-SDL-1.446-0>perl ./Build test
Fetching 'http://strawberryperl.com/package/kmx/sdl/Win64_SDL-1.2.14-extended-bin_20111205.zip'...
Checking checksum for 'download\Win64_SDL-1.2.14-extended-bin_20111205.zip'...
Extracting download\Win64_SDL-1.2.14-extended-bin_20111205.zip...
t\001_load.t ................ 1/1 # Testing Alien::SDL 1.446, Perl 5.030000, D:\Strawberry\perl\bin\perl.exe
# Build type: use_prebuilt_binaries
# Detected sdl-config script: n.a.
# Build option used:
#       Binaries Win/64bit SDL-1.2.14 (extended, 20111205) RECOMMENDED
#       (gfx, image, mixer, net, smpeg, ttf, sound, svg, rtf, Pango)
# URL:
#       http://strawberryperl.com/package/kmx/sdl/Win64_SDL-1.2.14-extended-bin_20111205.zip
#       http://froggs.de/libsdl/Win64_SDL-1.2.14-extended-bin_20111205.zip
# SHA1: 35f3b496ca443a9d14eff77e9e26acfa813afafd
t\001_load.t ................ ok
t\002_config.t .............. 1/6 # Prefix='D:\Strawberry\cpan\build\Alien-SDL-1.446-0\blib\lib\auto\share\dist\Alien-SDL\1.446_6ae293a9\bin\..\'
t\002_config.t .............. ok
t\003_check_header.t ........ # Testing basic headers SDL.h + SDL_version.h
[Alien::SDL] Testing header(s): SDL.h
t\003_check_header.t ........ 1/2 L.h, SDL_version.h
t\003_check_header.t ........ ok
t\004_get_header_version.t .. 1/1 # Core version: 1.2.14
t\004_get_header_version.t .. ok
t\release-pod-coverage.t .... skipped: these tests are for release candidate testing
t\release-pod-syntax.t ...... skipped: these tests are for release candidate testing
All tests successful.
Files=6, Tests=10,  8 wallclock secs ( 0.06 usr +  0.05 sys =  0.11 CPU)
Result: PASS

Yahoo!работает!!!или так кажется ...


Теперь я наконец могу использовать CPAN для установки библиотеки и игры?

… к сожалению, нет.

CPAN, вероятнообнаруживает, что я возился с источниками (ошибки контрольной суммы), повторно выбирает ванильную библиотеку в новую папку d:\Strawberry\cpan\build\Alien-SDL-1.446-1\ и завершает сборку с той же ошибкой, что и выше.Не хорошо.

По крайней мере perl ./Build.PL install работал, но эта библиотека, хотя и установленная локально, едва ли была зарегистрирована в локальном реестре CPAN, потому что была установлена ​​вне CPAN Framework? ..

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

cpan> install  Games::FrozenBubble
Running install for module 'Games::FrozenBubble'
Checksum for D:\Strawberry\cpan\sources\authors\id\K\KT\KTHAKORE\Games-FrozenBubble-2.212.tar.gz ok

……

Running make test for DRTECH/Locale-Maketext-Lexicon-1.00.tar.gz
"D:\Strawberry\perl\bin\perl.exe" "-MExtUtils::Command::MM" "-MTest::Harness" "-e" "undef *Test::Harness::Switches; test_harness(0, 'blib\lib', 'blib\arch')" t/*.t
t/1-basic.t ...................... 1/33 "msgunfmt" не является внутренней или внешней
командой, исполняемой программой или пакетным файлом.
t/1-basic.t ...................... ok
…… 
t/55-runextract.t ................ ok
t/6-gettext.t .................... 1/30 "msgunfmt" не является внутренней или внешней
командой, исполняемой программой или пакетным файлом.
t/6-gettext.t .................... ok
…...
t/preload.t ...................... ok
t/release-eol.t .................. skipped: these tests are for release candidate testing
t/release-pod-syntax.t ........... skipped: these tests are for release candidate testing
All tests successful.
Files=17, Tests=361, 11 wallclock secs ( 0.22 usr +  0.17 sys =  0.39 CPU)
Result: PASS

PASS ???Неужели?


с еще несколькими патчами - хотя и работает.Ностальгия ... https://github.com/kthakore/frozen-bubble/issues/72

...