in reply to Re^3: XS build error
in thread XS build error

You have EU-MM-6.56, which is not the version of EU::MM that shipped with your ActivePerl. Sure enough, if I update EU::MM to version 6.56 on AS build 1006 (which is the same build of perl as you have) I get the same error as you.

Simplest way to fix this would be to resort to the original version of EU::MM that shipped with build 1006 - and the easiest way to do that would be to just re-install ActivePerl "on top of" the existing perl installation.
Then check that the version you have is reported as "6.55_02" (which, I think, might be different to the version 6.55_02 that's on CPAN). If it still reports 6.56, then we have to try and work out where that version 6.56 is located, and why it is being found instead of the version that ships with ActivePerl.

Cheers,
Rob

Replies are listed 'Best First'.
Re^5: XS build error
by pvizeli (Initiate) on Jan 07, 2010 at 10:39 UTC

    Yes, that works fine. But now I've the first error. Is it link error while it use the false linker from VC?

    Set up gcc environment - 3.4.5 (mingw-vista special r3) dlltool --def Zmodem.def --output-exp dll.exp C:\Perl\site\bin\g++.exe -o blib\arch\auto\Device\Modem\Protocol\Zmode +m\Zmodem.d ll -Wl,--base-file -Wl,dll.base -mdll -L"C:\Perl\lib\CORE" Zmodem.o -W +l,--image- base,0x3f000000 C:\Perl\lib\CORE\perl510.lib -lkernel32 -luser32 -lgd +i32 -lwins pool -lcomdlg32 -ladvapi32 -lshell32 -lole32 -loleaut32 -lnetapi32 -lu +uid -lws2_ 32 -lmpr -lwinmm -lversion -lodbc32 -lodbccp32 -lmsvcrt dll.exp dll.exp:fake:(.edata+0x34): undefined reference to `boot_Device__Modem +__Protocol __Zmodem' dll.exp:fake:(.edata+0x38): undefined reference to `boot_Device__Modem +__Protocol __Zmodem' collect2: ld returned 1 exit status dmake.exe: Error code 129, while making 'blib\arch\auto\Device\Modem\ +Protocol\Z modem\Zmodem.dll'
      undefined reference to `boot_Device__Modem__Protocol__Zmodem'

      What does (the generated) Zmodem.def contain ? It should contain something like:
      EXPORTS boot_Device__Modem__Protocol__Zmodem _boot_Device__Modem__Protocol__Zmodem = boot_Device__Modem__Protocol +__Zmodem
      I think it's the Zmodem.xs file that determines the contents of the def file, so if the def file is wrong, it's probably a mistake in Zmodem.xs. (This stuff is case-sensitive, so pay attention to that aspect.)

      Cheers,
      Rob

        of course the problem was this:

        MODULE = Device::Modem::Protocol::Zmodem PACKAGE = Zmodem::Misc

        Thanks for all monk support :)