Beefy Boxes and Bandwidth Generously Provided by pair Networks
Syntactic Confectionery Delight
 
PerlMonks  

Re: Can't compile XS code

by syphilis (Canon)
on Oct 26, 2012 at 22:57 UTC ( #1001142=note: print w/ replies, xml ) Need Help??


in reply to Can't compile XS code

undefined reference to `_imp__Perl_get_context'

I would think that symbol (and all of the others mentioned) should have been resolved by C:\strawberry\perl\lib\CORE\libperl516.a, to which you are apparently linking.
Run objdump -t C:\strawberry\perl\lib\CORE\libperl516.a >dump.txt and check that `_imp__Perl_get_context' can be found in the output that was sent to dump.txt.
Looking at my build of Strawberry 5.12, it looks like those symbols might be prefixed by 2 (not one) underscores. However, I don't know if such a discrepancy would matter anyway.

What does perl -V output. This is strange ... it shouldn't be happening.

Perhaps simply re-installing Strawberry Perl might fix the problem.

Cheers,
Rob


Comment on Re: Can't compile XS code
Select or Download Code
Re^2: Can't compile XS code
by nglenn (Beadle) on Oct 26, 2012 at 23:26 UTC

    objdump gives me a whole bunch of:

    objdump: dknisxxxxx.o: File format not recognized

    perl -V gives me:

    Summary of my perl5 (revision 5 version 16 subversion 1) configuration +: Platform: osname=MSWin32, osvers=4.0, archname=MSWin32-x64-multi-thread uname='Win32 strawberry-perl 5.16.1.1 #1 Thu Aug 9 07:49:27 2012 +x64' config_args='undef' hint=recommended, useposix=true, d_sigaction=undef useithreads=define, usemultiplicity=define useperlio=define, d_sfio=undef, uselargefiles=define, usesocks=und +ef use64bitint=define, use64bitall=undef, uselongdouble=undef usemymalloc=n, bincompat5005=undef Compiler: cc='gcc', ccflags =' -s -O2 -DWIN32 -DWIN64 -DCONSERVATIVE -DPERL +_TEXTMODE_ SCRIPTS -DPERL_IMPLICIT_CONTEXT -DPERL_IMPLICIT_SYS -fno-strict-aliasi +ng -mms-bi tfields', optimize='-s -O2', cppflags='-DWIN32' ccversion='', gccversion='4.6.3', gccosandvers='' intsize=4, longsize=4, ptrsize=8, doublesize=8, byteorder=12345678 d_longlong=define, longlongsize=8, d_longdbl=define, longdblsize=1 +2 ivtype='long long', ivsize=8, nvtype='double', nvsize=8, Off_t='lo +ng long', lseeksize=8 alignbytes=8, prototype=define Linker and Libraries: ld='g++', ldflags ='-s -L"C:\strawberry\perl\lib\CORE" -L"C:\straw +berry\c\li b"' libpth=C:\strawberry\c\lib C:\strawberry\c\x86_64-w64-mingw32\lib libs=-lmoldname -lkernel32 -luser32 -lgdi32 -lwinspool -lcomdlg32 +-ladvapi32 -lshell32 -lole32 -loleaut32 -lnetapi32 -luuid -lws2_32 -lmpr -lwinmm + -lversion -lodbc32 -lodbccp32 -lcomctl32 perllibs=-lmoldname -lkernel32 -luser32 -lgdi32 -lwinspool -lcomdl +g32 -ladva pi32 -lshell32 -lole32 -loleaut32 -lnetapi32 -luuid -lws2_32 -lmpr -lw +inmm -lver sion -lodbc32 -lodbccp32 -lcomctl32 libc=, so=dll, useshrplib=true, libperl=libperl516.a gnulibc_version='' Dynamic Linking: dlsrc=dl_win32.xs, dlext=dll, d_dlsymun=undef, ccdlflags=' ' cccdlflags=' ', lddlflags='-mdll -s -L"C:\strawberry\perl\lib\CORE +" -L"C:\st rawberry\c\lib"' Characteristics of this binary (from libperl): Compile-time options: HAS_TIMES HAVE_INTERP_INTERN MULTIPLICITY PERLIO_LAYERS PERL_DONT_CREATE_GVSV PERL_IMPLICIT_CONTEXT PERL_IMPLICIT_SYS PERL_MALLOC_WRAP PERL_PRESERVE_IVUV PL_OP_SLAB +_ALLOC USE_64_BIT_INT USE_ITHREADS USE_LARGE_FILES USE_LOCALE USE_LOCALE_COLLATE USE_LOCALE_CTYPE USE_LOCALE_NUMERIC USE_PERLIO USE_PERL_ATOF Built under MSWin32 Compiled at Aug 9 2012 07:55:51 @INC: C:/strawberry/perl/site/lib/MSWin32-x64-multi-thread C:/strawberry/perl/site/lib C:/strawberry/perl/vendor/lib C:/strawberry/perl/lib .

      objdump: dknisxxxxx.o: File format not recognized

      Then that's your problem ... or at least *one* problem that needs to be fixed.

      Could that libperl516.a that's being found be a 32-bit version of libperl516.a ? The error messages from objdump would fit such a scenario.
      Compare it to the libperl516.a that's on the other machine you mentioned. They should be identical (obviously), right down to the Digest::MD5 signatures, if they're the same builds of Strawberry Perl.

      Afterthought: If that libperl516.a is 64-bit, then another possibility is that you've just run a 32-bit version of objdump on it. That would also fit the objdump errors you reported.

      Cheers,
      Rob
        I just removed and reinstalled the whole distribution. I still get the exact same errors.

        On a 64-bit os these seem odd -lkernel32 -luser32 -lgdi32 -lshell32 -lole32 -loleaut32 -lnetapi32

        Maybe the compiler chain knows to ignore that and link shell64 etc, maybe it doesn't

Log In?
Username:
Password:

What's my password?
Create A New User
Node Status?
node history
Node Type: note [id://1001142]
help
Chatterbox?
and the web crawler heard nothing...

How do I use this? | Other CB clients
Other Users?
Others chilling in the Monastery: (7)
As of 2015-07-07 02:23 GMT
Sections?
Information?
Find Nodes?
Leftovers?
    Voting Booth?

    The top three priorities of my open tasks are (in descending order of likelihood to be worked on) ...









    Results (86 votes), past polls