llancet has asked for the wisdom of the Perl Monks concerning the following question:

Hi monks!

I wrote a manuscript to a scientific journal about my genome visualization toolkit, which includes a PerlXS interface. However, some reviewers failed to compile it and asked for a precompiled binary package.

I thought there will be ABI compatibility issues, as the ABI by different Perl versions might changes. However I still tried it: I compiled the package on my Debian Jessie machine (Perl 5.20.1), and tried to run it on a Debian Whezzy machine (Perl 5.14.2). The result is surprise: before I got any Perl compatibility issue, I firstly got a glibc issue:

Can't load '/usr/local/share/perl/5.14.2/auto/GenoEye/GenoEye.so' for +module GenoEye: /lib/x86_64-linux-gnu/libc.so.6: version `GLIBC_2.14' + not found (required by /usr/local/share/perl/5.14.2/auto/GenoEye/Gen +oEye.so) at /usr/lib/perl/5.14/DynaLoader.pm line 184.

So, is there any possibility to release a precompiled PerlXS module for major Linux distributions?

Replies are listed 'Best First'.
Re: How to release a precompiled XS module? (apt-get repository)
by Anonymous Monk on Nov 10, 2014 at 08:32 UTC
      So I have to learn the complete Fedora and Debian packaging toolchains... What a painful world!

        So I have to learn the complete Fedora and Debian packaging toolchains... What a painful world!

        If you want to pick that

        You could also make PPMs

        Everything is some kind of PITA, pick your flavor :)

Re: How to release a precompiled XS module?
by jellisii2 (Hermit) on Nov 10, 2014 at 12:50 UTC
    Would PAR::Packer and the associated program pp be a way of doing this?

      Yes, this is a very good way to accomplish this.

      Note that you may have to do pp -x yourProgram.pl to "capture" the needed libraries.

      (If your program requires parameters when run, pp has an -xargs option with which you can specify the parameters. (I suggested this option a few years ago. Thanks again to the PAR::Packer devs for adding this.))

      If the resulting package still doesn't work, try adding -a /path/to/library for each of the still missing needed libraries.