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

Hello,

I've been trying to install the Win32::GUI module by Robert May (http://search.cpan.org/~robertmay/Win32-GUI-1.06/)
I downloaded the tar.gz file, extracted it to a directory and then tried to install it using the following commands as instructed on the Cpan website:

1) Perl Makefile.PL - This works fine at the moment

2) dmake - This returns the following errors at the end:
dmake: Error code 129, while making '..\blib\arch\auto\Win32\GUI\Constants\Constants.dll'
dmake: Error code 255, while making 'subdirs'

3) I tried going on to "dmake install," but that just returns the abovementioned errors again...

I'm running Windows 7 with Strawberry Perl and this is the first module I'm installing since my HD went nuts. (Don't worry, that's not the problem ;) )
If any of you know what is going on, I'd appreciate it if you'd tell me :P

Thanks in advance.

- Cbeppe

Replies are listed 'Best First'.
Re: Win32::GUI Installation Errors
by Anonyrnous Monk (Hermit) on Dec 19, 2010 at 22:13 UTC
    dmake: Error code 129, while making '..\blib\arch\auto\Win32\GUI\Constants\Constants.dll'

    Any message(s) before that which look like they might be hinting at the problem?

    "Error code 129" alone doesn't say much, as it's just the return code from some previous failed command which dmake attempted to run...

      The only lines before that that seem like errors are these:

      dll.exp: file not recognized: File format not recognized
      collect2: ld returned 1 exit status They are the two lines before the two error codes. All other commands seem to be positive, but I'll attach those below.

      Skip blib\lib\Win32/GUI/GridLayout.pm (unchanged)
      Skip blib\lib\Win32/GUI.pm (unchanged)
      Skip ..\blib\lib\Win32\GUI\BitmapInline.pm (unchanged)
      Skip ..\blib\lib\Win32\GUI/Constants/Tags.pm (unchanged)
      Skip ..\blib\lib\Win32\GUI/Constants.pm (unchanged)
      C:\strawberry\perl\bin\perl.exe "-I..\blib\arch"
      "-I..\blib\lib" Constants.PL constants.h
      C:\strawberry\perl\bin\perl.exe "-I..\blib\arch"
      "-I..\blib\lib" Constants.PL constants.src
      hash\perfect.exe < constants.src
      Read in 2031 keys
      found distinct (A,B) on attempt 143
      built perfect hash table of size 512
      Wrote phash.def
      Cleaned up
      C:\strawberry\perl\bin\perl.exe "-I..\blib\arch"
      "-I..\blib\lib" Constants.PL phash.inc
      C:\strawberry\perl\bin\perl.exe C:\strawberry\perl\lib\ExtUtils\xsubpp -typemap
      C:\strawberry\perl\lib\ExtUtils\typemap Constants.xs >
      Constants.xsc && C:\strawberry\perl\bin\perl.exe
      -MExtUtils::Command -e "mv" -- Constants.xsc Constants.c gcc -c -s -O2 -DWIN32 -DHAVE_DES_FCRYPT -DUSE_SITECUSTOMIZE -DPERL_IMPL ICIT_CONTEXT -DPERL_IMPLICIT_SYS -fno-strict-aliasing -DPERL_MSVCRT_READFIX -s -O2 -DVERSION=\"0.04\" -DXS_VERSION=\"0.04\" "-IC:\strawberry\perl\lib \CORE" Constants.c
      C:\strawberry\perl\bin\perl.exe "-I..\blib\arch" "-I..\blib\lib" ConstantsRC.PL Constants.rc
      windres -O coff -o Constants.res Constants.rc Running Mkbootstrap for Win32::GUI::Constants () C:\strawberry\perl\bin\perl.exe -MExtUtils::Command -e "chmod" -- 644 Constants.bs
      dlltool --def Constants.def --output-exp dll.exp g++ -o ..\blib\arch\auto\Win32\GUI\Constants\Constants.dll -Wl,--base-file -Wl,dll.base -mdll -s -L
      "C:\strawberry\perl\lib\CORE" -L"C:\strawberry\c\lib"
      Constants.o Constants.res -Wl,--image-base,0x370e0000
      C:\strawberry\perl\lib\CORE\libperl510.a
      -lmoldname -lkernel32 -luser32 -lgdi32 -lwinspool -lcomdlg32 -ladvapi32 -lshell32 -lole32 -loleaut32 -lnetapi32 -luuid -lws2_32 -lmpr -lwinmm -lversion -lodbc32 -lodbccp32 dll.exp
      dll.exp: file not recognized: File format not recognized
      collect2: ld returned 1 exit status
      dmake: Error code 129, while making '..\blib\arch\auto\Win32\GUI\Constants\Constants.dll'
      dmake: Error code 255, while making 'subdirs'


      I'm sorry for the mess, but copying messages from the command prompt is never pretty. I highlighted what I believe are the errors. It seems to be something to do with the .dll file.

      Thanks for taking the time.
        dll.exp: file not recognized: File format not recognized

        That's not right - first thing I'd try is re-installing Strawberry Perl.
        Win32-GUI-1.06 builds fine for me on both 5.10 and 5.12 editions of Strawberry Perl.

        Note that, if building Win32-GUI with Strawberry Perl, you miss out on Win32::GUI::AxWindow, Win32::GUI::Bitmap and Win32::GUI::Grid. (You'll see warnings about this during the 'perl Makefile.PL' stage.)
        If you want those features, then you should instead install Win32::GUI from the ActiveState ppm repository.

        Cheers,
        Rob

        dll.exp should be the list of symbols to export (binary format) that's being created right above with the command dlltool --def Constants.def --output-exp dll.exp.

        Other than that, I'm afraid I can't offer much wisdom :)  What does dll.exp contain? Maybe the file is empty because the dlltool command failed for some reason? Interestingly, my version of dlltool doesn't have an option --def, only --input-def or -d ...

        Update: a little googling suggests that --def is still understood for compatibility, so this shouldn't be an issue.

      Alright... I just installed MinGW to no avail :(

      Still getting the same errors...

      Dmake test produces the following:
      dlltool --def Constants.def --output-exp dll.exp g++ -o ..\blib\arch\auto\Win32\GUI\Constants\Constants.dll -Wl,--base- +file -Wl,dll.base -mdll -s -L"C:\strawberry\perl\lib\CORE" -L"C:\stra +wberry\c\li b" Constants.o Constants.res -Wl,--image-base,0x370e0000 C:\strawberr +y\perl\lib\CORE\libperl510.a -lmoldname -lkernel32 -luser32 -lgdi32 - +lwinspool - lcomdlg32 -ladvapi32 -lshell32 -lole32 -loleaut32 -lnetapi32 -luuid -l +ws2_32 -lmpr -lwinmm -lversion -lodbc32 -lodbccp32 dll.exp dll.exp: file not recognized: File format not recognized collect2: ld returned 1 exit status dmake: Error code 129, while making '..\blib\arch\auto\Win32\GUI\Cons +tants\Constants.dll' dmake: Error code 255, while making 'subdirs'


      Any more ideas? I'm honestly running out of stuff to try at the moment. Could always try to reinstall again, but...

      Thanks to everyone who's looking at this :)
        Alright... I just installed MinGW to no avail

        But you already had MinGW - it's in the Strawberry/c/ folder.
        Can you post the output of gcc -v ? With StrawberryPerl-5.10, mine looks like this:
        C:\>gcc -v Reading specs from C:/strawberry/c/bin/../lib/gcc/mingw32/3.4.5/specs Configured with: ../gcc-3.4.5-20060117-3/configure --with-gcc --with-g +nu-ld --with-gnu-as --host=mingw32 --target=mingw32 --prefix=/mingw - +-enable-threads --disable-nls --enable-languages=c,c++,f77,ada,objc,j +ava --disable-win32-registry --disable-shared --enable-sjlj-exception +s --enable-libgcj --disable-java-awt --without-x --enable-java-gc=boe +hm --disable-libgcj-debug --enable-interpreter --enable-hash-synchron +ization --enable-libstdcxx-debug Thread model: win32 gcc version 3.4.5 (mingw-vista special r3)
        You should see something similar.
        Something is seriously broken ... probably, but not necessarily, MinGW.

        Cheers,
        Rob
        Ok, so I gave up on Win32::GUI, and installed ActivePerl from activestate. I also downloaded their Tcl and Tkx, which does very much the same as Win32::Gui.

        I'd just like to thank everyone who helped me out here. I see myself becoming a member of this forum as soon as I get an account.

        Thanks :)
        - Cbeppe
        I'm running Windows 7 64bit (Could that be a problem?) and Strawberry Perl 5.10.1.3.

        The result for the new MinGW compiler is this:
        Using built-in specs. COLLECT_GCC=gcc Target: mingw32 Configured with: ../gcc-4.5.0/configure --enable-languages=c,c++,ada,f +ortran,objc,obj-c++ --disable-sjlj-exceptions --with-dwarf2 --enable- +shared --en able-libgomp --disable-win32-registry --enable-libstdcxx-debug --enabl +e-version-specific-runtime-libs --disable-werror --build=mingw32 --pr +efix=/mingw Thread model: win32 gcc version 4.5.0 (GCC)
        As you can see, the new MinGW is a later version than the one shipped with Perl.
        I ran the commands you mentioned, but it still returns the same errors on dmake. Dmake realclean does not return an error, but doesn't seem to affect the install in any other way though.

        - Cbeppe
        Here's one more idea if someone is willing to help:

        Could someone please upload an archive containing the directories that Win32::GUI installs itself into, so that I can do a very manual install? This is definitely a last resort, but it should work unless I need to modify the registry substantially.

        I'd really appreciate it if someone would be willing to help out on this.

        Thanks. - Cbeppe
        I just downloaded the 64bit version of Perl, which is still in Beta. I ran the installation process again, and got this error:
        In file included from Scintilla.xs:8: ../GUI.h:100: note: #pragma message: *** Using Preserved Perl context. In file included from Scintilla.xs:8: ../GUI.h:768: warning: 'ImageList_Duplicate' redeclared without dllimp +ort attribute: previous dllimport ignored Scintilla.xs: In function 'CallWndProc': Scintilla.xs:199: error: 'GWL_USERDATA' undeclared (first use in this +function) Scintilla.xs:199: error: (Each undeclared identifier is reported only +once Scintilla.xs:199: error: for each function it appears in.) dmake: Error code 129, while making 'Scintilla.o' dmake: Error code 255, while making 'subdirs'
        The error codes are the same, but the file that is causing the trouble is different. Any ideas?

        - Cbeppe
Re: Win32::GUI Installation Errors
by Anonymous Monk on Jan 29, 2011 at 10:23 UTC
    I've just found out what was the problem -- and I spent 2 days searching for the solution within dlltool executable, it was driving me crazy. I compared temporary files created by dlltool, tried to build binutils-2.17 myself, compared Makefiles, configure script outputs and they were all the same...

    The problem has a very simple solution afterwards. The problem is that dlltool invokes executables like "as" and "ld", but my PATH environment variable contains this executables from ATI in
    C:\Program Files (x86)\ATI Stream\bin\x86_64
    C:\Program Files (x86)\ATI Stream\bin\x86

    if these two directories are removed from PATH, everything works OK.

    It may be something else on your computer, so the solution may be just to put strawberry perl's PATH directories before other PATH dirs (at least during the installation of the modules that report dlltool problems)...

      I searched on the web and it seems to be a problem of conversion from win32 to win64 api. It seems some data types are not of same size on both platforms. I could fix the errors about GWL_USERDATA by replacing it with GWLP_USERDATA, but than other errors come out. The one thing I got is "invalid conversion from *void to DWORD" or similar. It seems that on win64 handles are 32bit and DWORDs 64bit. So trying to cast handles to DWORD (which seems to be normal practice in win32 programming - they were the same size) would issue that error. Simply said, Win32::GUI is not 64-bit safe and needs to be corrected to work both on win32 and win64 using portable data types that hold the same size on both platforms. Someone with better knowledge of this (win32 vs win64 api differnces and compatiblity) could issue a patch dealing with problem.
Re: Win32::GUI Installation Errors
by denishowe (Acolyte) on May 31, 2013 at 14:33 UTC
    See http://www.nntp.perl.org/group/perl.win32.vanilla/2012/06/msg414.html which points to http://strawberryperl.com/package/kmx/perl-modules-patched/Win32-GUI-1.06_patched3.tar.gz