I think the gcc version may have been a red herring
Quite possibly, but it seems that there's something about these old RHEL systems and gcc compilers that's triggering a bug - either a bug in List-MoreUtilsXS-0.428 or a bug in the way the handshake compatibility is being established.
I would suggest building perl with that handshake mechanism disabled - just to see if there is anything that is actually incompatible about XS.c. (Perhaps there's absolutely nothing wrong with XS.c.)
However, I don't know how to build such a perl without hacking at util.c (in the top level directory of the perl source).
If you think it's worth the effort, try changing (in util.c):
noperl_die("%s: loadable library and perl binaries are mismatched"
to a non-fatal:
Perl_warn(aTHX_ "%s: loadable library and perl binaries are mismatched
+"
or even just:
printf("%s: loadable library and perl binaries are mismatched"
And then rebuild perl and see how List-MoreUtils-XS-0.428 fares.
(I haven't tested either of those suggested hacks.)
Could you also post the config.log of the L::MU::XS build that is generated by the perl Makefile.PL step. (You'll find that config.log in the same directory as the Makefile.PL).
It might provide some clue as to the cause of the problem.
And it might be worth filing a bug report about this at https://rt.cpan.org/Public/Dist/Display.html?Name=List-MoreUtils-XS in case the author has some ideas.
Thanks for updating us !!
Cheers, Rob
| [reply] [d/l] [select] |
If you think it's worth the effort, try changing (in util.c)...
I don't think it's worth the effort.
I thought it might be useful to see what happens on your system if the handshake fails but the program is allowed to continue on.
So I tried (on Windows) changing the "noperl_die" to a "Perl_warn" as I suggested above, but when faced with an XS.dll (from an earlier version of perl) that failed to pass the handshake, the program still died:
XS.c: loadable library and perl binaries are mismatched (got handshake
+ key 00000000005487e8, needed 0000000000000000)
Even making util.c's Perl_xs_handshake() return as soon as the handshake mismatch was detected didn't prevent the fatality.
I was hoping for a simple, unsophisticated, way of turning the mismatch into nothing more than a warning - but the gestapo have got me snookered on that one ... for the moment, anyway.
It probably wouldn't have helped much, anyway.
Cheers, Rob | [reply] [d/l] |