Beefy Boxes and Bandwidth Generously Provided by pair Networks
No such thing as a small change
 
PerlMonks  

Using a shared object in perl

by sherab (Scribe)
on Aug 19, 2011 at 16:58 UTC ( [id://921286]=perlquestion: print w/replies, xml ) Need Help??

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

Hello monks! I am in a very specialized industry that depends on perl and I bought what I though was going to be a perl module but it turns out to be a .so file. I have no doubt that it probably works but this is new territory for me regarding perl. The documentation is REALLY light from the vendor (they probably hired someone to code it and that's it. Literally their documentation is "since the directory in which the perl interpreter looks for shared objects varies from installation to installation, we cannot give precise installation instructions" <sigh>

Specifically the object itself is named... perl64_mhdrg.so

The example code given to make it work is here....
use mhdrg; $retval = mhdrg ( ..... some stuff ..... );
Again forgive my ignorance for not knowing this but I'm very familiar with traditional modules but sharing an .so object is a complete mystery.
I tried the following...
ln -s perl64_mhdrg.so libmhdrg.so perl -MDynaLoader -I . -e 'package mhdrg; use parent "DynaLoader"; +bootstrap mhdrg; package main; mhdrg("f22", "/usr/tmp/drgmasks","1"," +34","2","V3000"," ","5","4");' perl: symbol lookup error: ./libmhdrg.so: undefined symbol: Perl_Ts +tack_sp_ptr
Looks like it's trying to load the library...... I do have my perl -V output appended to this message. I'm guessing that I'm not using the same version of Perl that the .so was built for but admittedly that's a guess.
I will be donating to the offering plate in conjunction with finding this answer. Lemons can be lemonade. :-)
UPDATE: I just donated $20.00 to the Perl Foundation. (You guys are the best and I appreciate the answer.
Anyone have an idea how I would proceed ?
JC
PS - perl -V output below ... (sorry about the lengthiness)
------------------------------------------
Summary of my perl5 (revision 5 version 10 subversion 1) configuration +: Platform: osname=linux, osvers=2.6.24-29-server, archname=x86_64-linux-gnu-t +hread-multi uname='linux crested 2.6.24-29-server #1 smp wed mar 16 19:04:28 u +tc 2011 x86_64 x86_64 x86_64 gnulinux ' config_args='-Dusethreads -Duselargefiles -Dccflags=-DDEBIAN -Dccc +dlflags=-fPIC -Darchname=x86_64-linux-gnu -Dprefix=/usr -Dprivlib=/us +r/share/perl/5.10 -Darchlib=/usr/lib/perl/5.10 -Dvendorprefix=/usr -D +vendorlib=/usr/share/perl5 -Dvendorarch=/usr/lib/perl5 -Dsiteprefix=/ +usr/local -Dsitelib=/usr/local/share/perl/5.10.1 -Dsitearch=/usr/loca +l/lib/perl/5.10.1 -Dman1dir=/usr/share/man/man1 -Dman3dir=/usr/share/ +man/man3 -Dsiteman1dir=/usr/local/man/man1 -Dsiteman3dir=/usr/local/m +an/man3 -Dman1ext=1 -Dman3ext=3perl -Dpager=/usr/bin/sensible-pager - +Uafs -Ud_csh -Ud_ualarm -Uusesfio -Uusenm -DDEBUGGING=-g -Doptimize=- +O2 -Dplibpth=/lib/x86_64-linux-gnu /usr/lib/x86_64-linux-gnu -Duseshr +plib -Dlibperl=libperl.so.5.10.1 -Dd_dosuid -des' hint=recommended, useposix=true, d_sigaction=define useithreads=define, usemultiplicity=define useperlio=define, d_sfio=undef, uselargefiles=define, usesocks=und +ef use64bitint=define, use64bitall=define, uselongdouble=undef usemymalloc=n, bincompat5005=undef Compiler: cc='cc', ccflags ='-D_REENTRANT -D_GNU_SOURCE -DDEBIAN -fno-strict +-aliasing -pipe -fstack-protector -I/usr/local/include -D_LARGEFILE_S +OURCE -D_FILE_OFFSET_BITS=64', optimize='-O2 -g', cppflags='-D_REENTRANT -D_GNU_SOURCE -DDEBIAN -fno-strict-aliasing + -pipe -fstack-protector -I/usr/local/include' ccversion='', gccversion='4.5.2', gccosandvers='' intsize=4, longsize=8, ptrsize=8, doublesize=8, byteorder=12345678 d_longlong=define, longlongsize=8, d_longdbl=define, longdblsize=1 +6 ivtype='long', ivsize=8, nvtype='double', nvsize=8, Off_t='off_t', + lseeksize=8 alignbytes=8, prototype=define Linker and Libraries: ld='cc', ldflags =' -fstack-protector -L/usr/local/lib' libpth=/usr/local/lib /lib/x86_64-linux-gnu /usr/lib/x86_64-linux- +gnu /lib /usr/lib /lib64 /usr/lib64 libs=-lgdbm -lgdbm_compat -ldb -ldl -lm -lpthread -lc -lcrypt perllibs=-ldl -lm -lpthread -lc -lcrypt libc=, so=so, useshrplib=true, libperl=libperl.so.5.10.1 gnulibc_version='2.13' Dynamic Linking: dlsrc=dl_dlopen.xs, dlext=so, d_dlsymun=undef, ccdlflags='-Wl,-E' cccdlflags='-fPIC', lddlflags='-shared -O2 -g -L/usr/local/lib -fs +tack-protector' Characteristics of this binary (from libperl): Compile-time options: MULTIPLICITY PERL_DONT_CREATE_GVSV PERL_IMPLICIT_CONTEXT PERL_MALLOC_WRAP USE_64_ +BIT_ALL USE_64_BIT_INT USE_ITHREADS USE_LARGE_FILES USE_PERLIO USE_REENTRANT_API Locally applied patches: DEBPKG:debian/arm_thread_stress_timeout - http://bugs.debian.o +rg/501970 Raise the timeout of ext/threads/shared/t/stress.t to accom +modate slower build hosts DEBPKG:debian/cpan_config_path - Set location of CPAN::Config +to /etc/perl as /usr may not be writable. DEBPKG:debian/cpan_definstalldirs - Provide a sensible INSTALL +DIRS default for modules installed from CPAN. DEBPKG:debian/db_file_ver - http://bugs.debian.org/340047 Remo +ve overly restrictive DB_File version check. DEBPKG:debian/doc_info - Replace generic man(1) instructions w +ith Debian-specific information. DEBPKG:debian/enc2xs_inc - http://bugs.debian.org/290336 Tweak + enc2xs to follow symlinks and ignore missing @INC directories. DEBPKG:debian/errno_ver - http://bugs.debian.org/343351 Remove + Errno version check due to upgrade problems with long-running proces +ses. DEBPKG:debian/extutils_hacks - Various debian-specific ExtUtil +s changes DEBPKG:debian/fakeroot - Postpone LD_LIBRARY_PATH evaluation t +o the binary targets. DEBPKG:debian/instmodsh_doc - Debian policy doesn't install .p +acklist files for core or vendor. DEBPKG:debian/ld_run_path - Remove standard libs from LD_RUN_P +ATH as per Debian policy. DEBPKG:debian/libnet_config_path - Set location of libnet.cfg +to /etc/perl/Net as /usr may not be writable. DEBPKG:debian/m68k_thread_stress - http://bugs.debian.org/4958 +26 Disable some threads tests on m68k for now due to missing TLS. DEBPKG:debian/mod_paths - Tweak @INC ordering for Debian DEBPKG:debian/module_build_man_extensions - http://bugs.debian +.org/479460 Adjust Module::Build manual page extensions for the Debia +n Perl policy DEBPKG:debian/perl_synopsis - http://bugs.debian.org/278323 Re +arrange perl.pod DEBPKG:debian/prune_libs - http://bugs.debian.org/128355 Prune + the list of libraries wanted to what we actually need. DEBPKG:debian/use_gdbm - Explicitly link against -lgdbm_compat + in ODBM_File/NDBM_File. DEBPKG:fixes/assorted_docs - http://bugs.debian.org/443733 [38 +4f06a] Math::BigInt::CalcEmu documentation grammar fix DEBPKG:fixes/net_smtp_docs - http://bugs.debian.org/100195 [rt +.cpan.org #36038] Document the Net::SMTP 'Port' option DEBPKG:fixes/processPL - http://bugs.debian.org/357264 [rt.cpa +n.org #17224] Always use PERLRUNINST when building perl modules. DEBPKG:debian/perlivp - http://bugs.debian.org/510895 Make per +livp skip include directories in /usr/local DEBPKG:fixes/pod2man-index-backslash - http://bugs.debian.org/ +521256 Escape backslashes in .IX entries DEBPKG:debian/disable-zlib-bundling - Disable zlib bundling in + Compress::Raw::Zlib DEBPKG:fixes/kfreebsd_cppsymbols - http://bugs.debian.org/5330 +98 [3b910a0] Add gcc predefined macros to $Config{cppsymbols} on GNU/ +kFreeBSD. DEBPKG:debian/cpanplus_definstalldirs - http://bugs.debian.org +/533707 Configure CPANPLUS to use the site directories by default. DEBPKG:debian/cpanplus_config_path - Save local versions of CP +ANPLUS::Config::System into /etc/perl. DEBPKG:fixes/kfreebsd-filecopy-pipes - http://bugs.debian.org/ +537555 [16f708c] Fix File::Copy::copy with pipes on GNU/kFreeBSD DEBPKG:fixes/anon-tmpfile-dir - http://bugs.debian.org/528544 +[perl #66452] Honor TMPDIR when open()ing an anonymous temporary file DEBPKG:fixes/abstract-sockets - http://bugs.debian.org/329291 +[89904c0] Add support for Abstract namespace sockets. DEBPKG:fixes/hurd_cppsymbols - http://bugs.debian.org/544307 [ +eeb92b7] Add gcc predefined macros to $Config{cppsymbols} on GNU/Hurd +. DEBPKG:fixes/autodie-flock - http://bugs.debian.org/543731 All +ow for flock returning EAGAIN instead of EWOULDBLOCK on linux/parisc DEBPKG:fixes/archive-tar-instance-error - http://bugs.debian.o +rg/539355 [rt.cpan.org #48879] Separate Archive::Tar instance error s +trings from each other DEBPKG:fixes/positive-gpos - http://bugs.debian.org/545234 [pe +rl #69056] [c584a96] Fix \G crash on first match DEBPKG:debian/devel-ppport-ia64-optim - http://bugs.debian.org +/548943 Work around an ICE on ia64 DEBPKG:fixes/trie-logic-match - http://bugs.debian.org/552291 +[perl #69973] [0abd0d7] Fix a DoS in Unicode processing [CVE-2009-362 +6] DEBPKG:fixes/hppa-thread-eagain - http://bugs.debian.org/55421 +8 make the threads-shared test suite more robust, fixing failures on +hppa DEBPKG:fixes/crash-on-undefined-destroy - http://bugs.debian.o +rg/564074 [perl #71952] [1f15e67] Fix a NULL pointer dereference when + looking for a DESTROY method DEBPKG:fixes/tainted-errno - http://bugs.debian.org/574129 [pe +rl #61976] [be1cf43] fix an errno stringification bug in taint mode DEBPKG:fixes/safe-upgrade - http://bugs.debian.org/582978 Upgr +ade Safe.pm to 2.25, fixing CVE-2010-1974 DEBPKG:fixes/tell-crash - http://bugs.debian.org/578577 [f4817 +f3] Fix a tell() crash on bad arguments. DEBPKG:fixes/format-write-crash - http://bugs.debian.org/57953 +7 [perl #22977] [421f30e] Fix a crash in format/write DEBPKG:fixes/arm-alignment - http://bugs.debian.org/289884 [f1 +c7503] Prevent gcc from optimizing the alignment test away on armel DEBPKG:fixes/fcgi-test - Fix a failure in CGI/t/fast.t when FC +GI is installed DEBPKG:fixes/hurd-ccflags - http://bugs.debian.org/587901 Make + hints/gnu.sh append to $ccflags rather than overriding them DEBPKG:debian/squelch-locale-warnings - http://bugs.debian.org +/508764 Squelch locale warnings in Debian package maintainer scripts DEBPKG:fixes/lc-numeric-docs - http://bugs.debian.org/379329 [ +perl #78452] [903eb63] LC_NUMERIC documentation fixes DEBPKG:fixes/lc-numeric-sprintf - http://bugs.debian.org/60154 +9 [perl #78632] [b3fd614] Fix sprintf not to ignore LC_NUMERIC with c +onstants DEBPKG:fixes/concat-stack-corruption - http://bugs.debian.org/ +596105 [perl #78674] [e3393f5] Fix stack pointer corruption in pp_con +cat() with 'use encoding' DEBPKG:fixes/cgi-multiline-header - http://bugs.debian.org/606 +995 [CVE-2010-2761 CVE-2010-4410 CVE-2010-4411] CGI.pm MIME boundary +and multiline header vulnerabilities DEBPKG:fixes/h2ph-gcc-4.5 - http://bugs.debian.org/599933 [8d6 +6b3f] Fix h2ph and test DEBPKG:fixes/threads-tmps-crash - [perl #70411] [24855df] Cond +itionally compile tmps stack cleanup code DEBPKG:patchlevel - http://bugs.debian.org/567489 List package +d patches for 5.10.1-17ubuntu1 in patchlevel.h Built under linux Compiled at Apr 26 2011 15:56:28 @INC: /etc/perl /usr/local/lib/perl/5.10.1 /usr/local/share/perl/5.10.1 /usr/lib/perl5 /usr/share/perl5 /usr/lib/perl/5.10 /usr/share/perl/5.10 /usr/local/lib/site_perl

Replies are listed 'Best First'.
Re: Using a shared object in perl
by Anonymous Monk on Aug 20, 2011 at 02:48 UTC

    You need to ask for a copy of blib

    Here is how it works

    Save this module as SOso-0.01.patch.txt

    diff -ruN empty/lib/SOso.pm SOso-0.01/lib/SOso.pm --- empty/lib/SOso.pm 1969-12-31 16:00:00.000000000 -0800 +++ SOso-0.01/lib/SOso.pm 2011-08-19 19:28:36.000000000 -0700 @@ -0,0 +1,11 @@ +package SOso; + +use strict; +use warnings; + +our $VERSION = '0.01'; + +require XSLoader; +XSLoader::load('SOso', $VERSION); + +1; diff -ruN empty/Makefile.PL SOso-0.01/Makefile.PL --- empty/Makefile.PL 1969-12-31 16:00:00.000000000 -0800 +++ SOso-0.01/Makefile.PL 2011-08-19 19:32:42.843750000 -0700 @@ -0,0 +1,5 @@ +use ExtUtils::MakeMaker; +WriteMakefile( + NAME => 'SOso', + VERSION_FROM => 'lib/SOso.pm', # finds $VERSION +); diff -ruN empty/MANIFEST SOso-0.01/MANIFEST --- empty/MANIFEST 1969-12-31 16:00:00.000000000 -0800 +++ SOso-0.01/MANIFEST 2011-08-19 19:32:23.609375000 -0700 @@ -0,0 +1,5 @@ +lib/SOso.pm +Makefile.PL +MANIFEST +SOso.xs +t/SOso.t \ No newline at end of file diff -ruN empty/SOso.xs SOso-0.01/SOso.xs --- empty/SOso.xs 1969-12-31 16:00:00.000000000 -0800 +++ SOso-0.01/SOso.xs 2011-08-19 19:30:12.000000000 -0700 @@ -0,0 +1,8 @@ +#include "EXTERN.h" +#include "perl.h" +#include "XSUB.h" + +MODULE = SOso PACKAGE = SOso + +PROTOTYPES: DISABLE + diff -ruN empty/t/SOso.t SOso-0.01/t/SOso.t --- empty/t/SOso.t 1969-12-31 16:00:00.000000000 -0800 +++ SOso-0.01/t/SOso.t 2011-08-19 19:29:00.000000000 -0700 @@ -0,0 +1,4 @@ +use strict; +use warnings; +use Test::More tests => 1; +BEGIN { use_ok('SOso') };

    Create this module

    md SOso-0.01 cd SOso-0.01 patch -p1 < ../SOso-0.01.patch.txt

    Build the module perl Makefile.PL && make test and you'll get

    $ tree -f blib blib |-- blib/arch | `-- blib/arch/auto | `-- blib/arch/auto/SOso | |-- blib/arch/auto/SOso/SOso.bs | `-- blib/arch/auto/SOso/SOso.dll |-- blib/bin |-- blib/lib | |-- blib/lib/SOso.pm | `-- blib/lib/auto | `-- blib/lib/auto/SOso |-- blib/man1 |-- blib/man3 `-- blib/script

    Now to install blib without Makefile you use

     

    This question crossposted at http://stackoverflow.com/questions/7113320/where-to-find-the-perl-shared-objects-directory

      It worked spot-on for actually building and patching. I wasn't aware of the patch command so I'm going to research this some more. Even after all of that though I'm still getting...
      perl: symbol lookup error: /usr/lib/perl/5.10/auto/mhdrg/mhdrg.so: und +efined symbol: Perl_Tstack_sp_ptr

      Every solution I have seen when googling "Perl_Tstack_sp_ptr" suggests recompiling the source and unfortunately we don't have access to that. I think we're just going to stand up a box running perl 5.8 so we can solve this but I really appreciate the answers.
Re: Using a shared object in perl
by juster (Friar) on Aug 20, 2011 at 14:15 UTC
    I'm guessing that I'm not using the same version of Perl that the .so was built for but admittedly that's a guess.

    Yep, compiled XS modules need to be run by the same version as perl (edit: that they were compiled with). Maybe you need only the same major version of perl?

    Anyone have an idea how I would proceed ?

    Ask the vendor which version the .so is compiled for, have them compile it for your version of perl, or try different versions of perl by trial and error. Time to build your own perl instead of using the bundled perl.

    Looks like you probably need perl 5.9. I googled "Perl_Tstack_sp_ptr" and this seems to be the clearest record of breaking compiled perl modules by upgrading to a new major version of perl: https://bugs.archlinux.org/task/9078

Log In?
Username:
Password:

What's my password?
Create A New User
Domain Nodelet?
Node Status?
node history
Node Type: perlquestion [id://921286]
Approved by Corion
Front-paged by ww
help
Chatterbox?
and the web crawler heard nothing...

How do I use this?Last hourOther CB clients
Other Users?
Others examining the Monastery: (5)
As of 2024-03-29 12:15 GMT
Sections?
Information?
Find Nodes?
Leftovers?
    Voting Booth?

    No recent polls found