MacOSX 10.8 und 32-Bit-Perl-Module

Ich habe gerade von MacOSX 10.6 auf 10.8 aktualisiert. Viele meiner Projekte hängen von Mac::Glue, Mac::Carbon und dergleichen ab. Obwohl Mac::Glue mit MacOSX 10.8 Perl geliefert wird, scheint es nicht zu funktionieren:

[kw|~] perl -ce 'use Mac::Glue'
Can't load '/System/Library/Perl/Extras/5.12/darwin-thread-multi-2level/auto/MacPerl/MacPerl.bundle' for module MacPerl: dlopen(/System/Library/Perl/Extras/5.12/darwin-thread-multi-2level/auto/MacPerl/MacPerl.bundle, 1): no suitable image found.  Did find:
    /System/Library/Perl/Extras/5.12/darwin-thread-multi-2level/auto/MacPerl/MacPerl.bundle: mach-o, but wrong architecture at /System/Library/Perl/5.12/darwin-thread-multi-2level/DynaLoader.pm line 204.
 at /System/Library/Perl/Extras/5.12/Mac/Glue/Common.pm line 21
Compilation failed in require at /System/Library/Perl/Extras/5.12/Mac/Glue/Common.pm line 21.
BEGIN failed--compilation aborted at /System/Library/Perl/Extras/5.12/Mac/Glue/Common.pm line 21.
Compilation failed in require at /System/Library/Perl/Extras/5.12/Mac/Glue.pm line 7.
BEGIN failed--compilation aborted at /System/Library/Perl/Extras/5.12/Mac/Glue.pm line 7.
Compilation failed in require at -e line 1.
BEGIN failed--compilation aborted at -e line 1.

Mac::Glue ist 32-Bit:

[kw|~] lipo -info /System/Library/Perl/Extras/5.12/darwin-thread-multi-2level/auto/MacPerl/MacPerl.bundle
Non-fat file: /System/Library/Perl/Extras/5.12/darwin-thread-multi-2level/auto/MacPerl/MacPerl.bundle is architecture: i386

/usr/bin/perl behauptet, mit dieser Architektur kompatibel zu sein:

[kw|~] file /usr/bin/perl
/usr/bin/perl: Mach-O universal binary with 2 architectures
/usr/bin/perl (for architecture i386):  Mach-O executable i386
/usr/bin/perl (for architecture x86_64):    Mach-O 64-bit executable x86_64

Ich verwende MacOSX 10.8.2, Perl 5.12.4.

Hat jemand eine Idee, wie man dieses Problem beheben kann? Wenn MacOSX 64-Bit ist, hindert das Perl daran, mit 32-Bit-Modulen kompatibel zu sein, obwohl es behauptet, mit zwei Architekturen kompatibel zu sein?

Antworten (2)

Ich habe eine Lösung für das Problem gefunden: Verwenden Sie den MacOSX-Befehl „arch“, um zu erzwingen, dass Perl als 32-Bit ausgeführt wird. (Siehe auch https://stackoverflow.com/questions/2088569/how-do-i-force-python-to-be-32-bit-on-snow-leopard-and-other-32-bit-64-bit -Suche .)

[kw|~] arch -32 perl5.12 -ce 'use Mac::Glue'
-e syntax OK

Beachten Sie, dass man explizit „perl5.12“ und nicht einfach „perl“ benötigt, da (unter MacOSX 10.8) /usr/bin/perl ein Shell-Skript ist, das entweder an /usr/bin/perl5.12 oder /usr/ delegiert. bin/perl5.10.

Eigentlich gibt es zwei andere Möglichkeiten, dies zu tun, wenn wir uns darauf beziehen man perlmacosx:

  1. Verwenden Sie "Standardwerte":

    % defaults write com.apple.versioner.perl Prefer-32-Bit -bool yes 
    
  2. VERSIONER_PERL_PREFER_32_BITVerwenden Sie die auf "true", "yes" oder 1 gesetzte Umgebungsvariable

Mit beiden perl -ce 'use Mac::Glue'erhalten Sie:-e syntax OK