【问题标题】:Why can't I install SDL on any of my portable perl installations on windows?为什么我不能在 Windows 上的任何便携式 perl 安装上安装 SDL?
【发布时间】:2018-11-06 19:09:23
【问题描述】:

在学校,我们被告知要使用我们选择的语言进行私人项目。我选择了 perl,而对于图形(强制组件)选择了 SDL。

之前我安装了portable-git,而git-bash 的东西是随perl 一起提供的。万岁!有效!让我们安装 sdl!

cpan SDL

输出:

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

这让我很困惑,尤其是当我收到 cpan CPAN::Author 的相同消息时。 所以我安装了一个便携版的草莓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 无法自行配置。

【问题讨论】:

  • 我也尝试过使用 cmder 的 perl,但这给出了来自 git-bash 的错误。
  • 模块安装成功,还是报错?似乎您缺少先决条件,并且没有完成制作..
  • 尝试使用 cpanm。 cpan App-cpanminus 然后cpanm SDL
  • 一般来说,如果在其他模块(此处为 CPAN::Author)上安装失败,请尝试安装该模块,然后重新尝试原始安装。
  • @xxfelixxx 正如我所说,cpan CPAN::Author 给出了同样的错误。因为它确实告诉我要尝试安装它,所以我做到了。

标签: windows perl sdl cpan strawberry-perl


【解决方案1】:

对topicstarter的简短回答:

SDL 1.x 库和 Alien:SDL perl 模块似乎都没有维护,大家都去了 SDL2 和 Alien::SDL2

你也应该这样。

我安装了 Strawberry 5.30 Win64,然后解决了文件/文件夹访问权限的明显问题,因为我不想以管理员用户身份运行 Perl 或 Perl 游戏。

  • d:\草莓\cpan\
  • d:\Strawberry\perl\

然后我刚刚发出了 Windows shell 命令cpan install Alien:SDL2 - 它安装得很好。

另外,似乎可以安装Alien:SDL version 1,但这需要Win32/x86 版本的Strawberry Perl,而不是Win64/x64 版本。但为什么?根据http://yapgh.blogspot.com 的说法,SDL v.1 自 2013 年 3 月起已失效。


只是添加更多细节。
也被这个击中了....
我的愿望只是在 Win10 x64 机器上运行 Frozen Bubbles 游戏。
我有一些编程经验,但不是 Perl,我也没有 Perl IDE 或其他东西。
我不想要任何 Perl 编程的麻烦,我只想让游戏运行。

我因同样的错误消息从 Google 删除了这里,所以这可能对其他人也有帮助,Google 可能也会将其转发到这里。


就像我说的,SDL 1.x 库和 Alien:SDL perl 模块是无人维护的。

不过 FrozenBubble 游戏也不再维护,仅适用于 SDL 1.x


CPAN 测试对 Windows 上的 Alien::SDL 有以下记录: 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)

所以似乎可以归结为一个问题,GCC 7.1 和 8.3 的 Win64 的 ABI 是否相同。


这个错误似乎是由这个文件触发的:

  • 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])$/
  • 注意:Win32 库二进制文件缺少 GCC 版本元素(不检查)!

该文件还有一个 sub check_prebuilt_binaries 循环遍历数组并尝试将找到的 Perl 环境与这些条件匹配。

sub 的第二行被注释掉了要检查的环境的调试 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

我不是很好的正则表达式,但就我所见,GCC Win64 版本被固定为 4.4.5+ 或 4.5.x - 并且不允许使用 5.0+ 版本。可能在上次提交 Alien:SDL 时它们并不存在。


GCC 发行说明提到 ABI 更改 w.r.t。 x86-64 相当频繁,例如:

等等

我不知道哪些特定的 Win64 GCC ABI 更改对 LibSDL 至关重要。但从 CPAN 测试看来,至少 GCC 4.5 和 7.1 之间的 Win32 ABI 变化并没有那么糟糕。无论如何,使用现代 GCC 从源代码编译 SDL 1.x 肯定超出了我的能力。所以,要么接受,要么离开......


希望好,我刚刚删除(注释掉)“推荐”Win64 SDL1 预构建二进制文件的 GCC 版本测试。

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

雅虎!作品!!!或者看起来是这样......


现在我终于可以使用 CPAN 安装 lib 和游戏了吗?

……很遗憾,不是。

CPAN 可能检测到我修改了源(校验和失败),将 vanilla 库重新提取到新的 d:\Strawberry\cpan\build\Alien-SDL-1.446-1\ 文件夹中 - 并且构建失败并出现与上述相同的错误。不好。

至少perl ./Build.PL install 工作了,但是这个库虽然安装在本地,但几乎没有在本地 CPAN 注册表中注册,因为它安装在 CPAN 框架之外?..

可能 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

通过???真的吗?


还有几个补丁 - 虽然它运行。怀旧... https://github.com/kthakore/frozen-bubble/issues/72

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 2011-02-04
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2014-12-06
    • 1970-01-01
    • 2015-06-12
    • 1970-01-01
    相关资源
    最近更新 更多