MacOSX 10.8 y módulos perl de 32 bits

Acabo de actualizar MacOSX 10.6 a 10.8. Muchos de mis proyectos dependen de Mac::Glue, Mac::Carbon y similares. Aunque Mac::Glue viene incluido con MacOSX 10.8 perl, parece que no funciona:

[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 es de 32 bits:

[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 afirma ser compatible con esa arquitectura:

[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

Estoy ejecutando MacOSX 10.8.2, perl 5.12.4.

¿Alguien tiene alguna idea de cómo solucionar este problema? Si MacOSX es de 64 bits, ¿eso impide que Perl sea compatible con módulos de 32 bits, a pesar de que afirma ser compatible con dos arquitecturas?

Respuestas (2)

Encontré una solución al problema: use el comando 'arch' de MacOSX para obligar a Perl a ejecutarse como 32 bits. (Ver también https://stackoverflow.com/questions/2088569/how-do-i-force-python-to-be-32-bit-on-snow-leopard-and-other-32-bit-64-bit -búsqueda .)

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

Tenga en cuenta que se necesita el "perl5.12" explícito y no simplemente "perl", ya que (en MacOSX 10.8) /usr/bin/perl es un script de shell que delega a /usr/bin/perl5.12 o /usr/ bin/perl5.10.

En realidad, existen otras dos formas de hacerlo, si nos referimos a man perlmacosx:

  1. Utilice "valores predeterminados":

    % defaults write com.apple.versioner.perl Prefer-32-Bit -bool yes 
    
  2. Use la variable de entorno VERSIONER_PERL_PREFER_32_BITestablecida en "verdadero", "sí" o 1

Con cualquiera de los dos, perl -ce 'use Mac::Glue'obtienes:-e syntax OK