http://www.perlmonks.org?node_id=676881

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

I just tried to install Devel::Cover on my home box running WinXP and Strawberry Perl 5.8.8. It failed with:
C:\DOCUME~1\linjoh\LOCALS~1\Temp\cpan\build\Devel-Cover-0.63>g++ -o bl +ib\arch\auto\Devel\Cover\Cover.dll -Wl,- -base-file -Wl,dll.base -mdll -s -L"c:\strawberry-perl\perl\lib\CORE" +-L"c:\strawberry-perl\mingw\lib" Cover.o -Wl,--image-base,0x31410000 C:\strawberry-perl\perl\lib\CORE\libperl +58.a -lmsvcrt -lmoldname -lkernel32 -lus er32 -lgdi32 -lwinspool -lcomdlg32 -ladvapi32 -lshell32 -lole32 -lolea +ut32 -lnetapi32 -luuid -lws2_32 -lmpr -l winmm -lversion -lodbc32 -lodbccp32 dll.exp Cover.o:Cover.c:(.text+0x2002): undefined reference to `Perl_pp_nextst +ate' Cover.o:Cover.c:(.text+0x2050): undefined reference to `Perl_pp_nextst +ate' Cover.o:Cover.c:(.text+0x20c2): undefined reference to `Perl_pp_setsta +te' Cover.o:Cover.c:(.text+0x2110): undefined reference to `Perl_pp_setsta +te' Cover.o:Cover.c:(.text+0x2182): undefined reference to `Perl_pp_dbstat +e' Cover.o:Cover.c:(.text+0x21d0): undefined reference to `Perl_pp_dbstat +e' Cover.o:Cover.c:(.text+0x2237): undefined reference to `Perl_pp_enters +ub' Cover.o:Cover.c:(.text+0x2270): undefined reference to `Perl_pp_enters +ub' Cover.o:Cover.c:(.text+0x22d7): undefined reference to `Perl_pp_cond_e +xpr' Cover.o:Cover.c:(.text+0x2377): undefined reference to `Perl_pp_and' Cover.o:Cover.c:(.text+0x2417): undefined reference to `Perl_pp_andass +ign' Cover.o:Cover.c:(.text+0x24b7): undefined reference to `Perl_pp_or' Cover.o:Cover.c:(.text+0x2557): undefined reference to `Perl_pp_orassi +gn' Cover.o:Cover.c:(.text+0x25f7): undefined reference to `Perl_pp_xor' Cover.o:Cover.c:(.text+0x2697): undefined reference to `Perl_pp_requir +e' Cover.o:Cover.c:(.text+0x2737): undefined reference to `Perl_pp_exec' collect2: ld returned 1 exit status
This is the same error CPAN testers see. But looking at the CPAN Testers Matrix says it seem to work on Cygwin, at least some of the time.

And, ack'ing through my cygwin perl directory shows that these symbols are present in:

Binary file 5.8\cygwin\CORE\libperl.a matches Binary file 5.8\cygwin\CORE\libperl.dll.a matches

But ack'ing the Strawberry installation only matches header files (as with Cygwin). No match on .\lib\CORE\libperl58.a (or ./bin/perl58.dll?) where I suppose it would go if exported.

So, could this be because of the way Strawberry Perl is built? Is there some way to have it export those symbols similar to what Cygwin does?

Looking at the diff between my configuration and a working Cygwin Perl configuration, there are two ld flags that look promising (-Wl,--export-all-symbols and -Wl,--enable-auto-import).

I won't build a new Perl right now (getting a bit late), but maybe someone with a bit more clue can give me a hint on whether this sounds like the way to go?

Thanks,

/J