in reply to 32bit lib on 64bit system

I just discussed the issue with a former SuSE developer... and we finally agreed that the perl-32bit package is just plain broken/incomplete1. — In other words, it's not your fault! :)

As a workaround, you can proceed as follows:

Get hold of the following two RPMs (e.g. from the SuSE 10.3 installation media in the i586 subdirectory), and copy them into some temporary directory:

perl-base-5.8.8-75.i586.rpm perl-5.8.8-75.i586.rpm

Extract the 32-bit perl binary and the i586-linux-thread-multi subtrees from those packages

temp/ $ rpm2cpio perl-base-5.8.8-75.i586.rpm | cpio -idmv '*i586-linux +*' './usr/bin/perl' temp/ $ rpm2cpio perl-5.8.8-75.i586.rpm | cpio -idmv '*i586-linux +*'

Rename the binary, e.g. to "perl32"

temp/ $ mv usr/bin/perl usr/bin/perl32

In the temp dir, you should find a directory ./usr, which you then just copy over into the existing (64-bit) perl installation, i.e. (as root):

temp/ $ cp -af usr/ /

(don't worry... the 64-bit version will work as before)

___

1 The perl-32bit package is missing

(bug report submitted, so hopefully the issue will be fixed in the next SuSE release)

Replies are listed 'Best First'.
Re^2: 32bit lib on 64bit system
by bkchapin (Acolyte) on Nov 26, 2008 at 05:27 UTC
    This fixed the problem, thank you! Just one thing: "perl32 Makefile.PL;make;make test" wasn't enough. Must do "perl32 Makefile.PL;make PASTHRU_INC='-m32' LD='cc -m32';make test"
Re^2: 32bit lib on 64bit system
by bkchapin (Acolyte) on Dec 02, 2008 at 06:04 UTC

    The celebration was premature. "make test" works, but when we try "perl32 icstest.pl" we get

    perl32: symbol lookup error: /usr/lib/perl5/5.8.8/i586-linux-thread-multi/auto/ICS/ICS.so: undefined symbol: Perl_Istack_sp_ptr

    No doubt we are still missing something, but what?

      It appears the symbol Perl_Istack_sp_ptr is only available in Perl 5.10.0 (in 5.8.8, the respective macro is defined as *Perl_Tstack_sp_ptr(aTHX)). In other words, my educated guess would be that, somehow, some part of your proprietary ICS lib or Perl module had been linked against libperl 5.10.0 ...

      It's not yet time to give up, however! :)

      You could install the perl-5.10.0 packages from SuSE 11.0 (I verified the package is compatible with the library versions (libc, etc.) that come with older SuSE releases (going back to 10.1), so this should - in theory - work).  You can get the RPMs from here:

      perl-base-5.10.0-37.4.i586.rpm
      perl-5.10.0-37.4.i586.rpm

      (the slightly older, original 11.0 packages can be found here, for example)

      You'd need to install the entire contents in this particular case. Most of the stuff will install under

      /usr/lib/perl5/5.10.0/i586-linux-thread-multi /usr/lib/perl5/5.10.0 /usr/lib/perl5/vendor_perl/5.10.0/i586-linux-thread-multi /usr/lib/perl5/vendor_perl/5.10.0

      so if you rename the remaining files in /usr/bin and /share, the package should peacefully coexist with your existing 5.8.8 perls.

      There's a little gotcha, though. SuSE has changed the internal compression format of their RPMs starting with 11.0, so you won't be able to install/unpack the packages using the old RPM tools from 10.3 — i.e. neither rpm nor rpm2cpio will work.  In other words, you'd first need to get the new RPM tools that come with 11.0  (luckily, it seems they were foresighted enough to use the old compression format for this very RPM package itself...).

      Alternatively, you could consider upgrading to SuSE 11.0 (or maybe 11.1 (currently beta)).

      Or, as a last resort, I could provide a re-packaged tarball (feel free to /msg me privately if all else fails).   Good luck!