in reply to Re^4: Tcl for Strawberry Perl on Windows 64bit
in thread Tcl for Strawberry Perl on Windows 64bit

Hmm, thats kinda interesting :)

Ok next step is do what syphilis suggested which is generate a new "lib" from the dll( HOWTO Create an Import Library for a DLL using MinGW | MinGW )

So start a new shell and run

chdir C:\Tcl\lib move tcl86.lib original-tcl86.lib gendef C:\Tcl\bin\tcl86.dll dlltool --kill-at --input-def tcl86.def --output-lib tcl86.lib

Then back in the the other cmd window run dmake again

If it doesn't work copy/paste the error to share with us here :)

Then try again with     dlltool -z tcl86.def --export-all-symbol C:\Tcl\bin\tcl86.dll instead of gendef

Replies are listed 'Best First'.
Re^6: Tcl for Strawberry Perl on Windows 64bit
by DaveARoberts (Acolyte) on Jul 23, 2015 at 20:42 UTC

    Thanks for this guidance. Made a little progress, but still could use your help. The commands you suggested worked without error....

    C:\Tcl\lib>move tcl86.lib original-tcl86.lib 1 file(s) moved. C:\Tcl\lib>gendef C:\Tcl\bin\tcl86.dll * [C:\Tcl\bin\tcl86.dll] Found PE+ image C:\Tcl\lib>dlltool --kill-at --input-def tcl86.def --output-lib tcl86. +lib C:\Tcl\lib>

    I was able to dmake the Tcl package without error. However when I tried to test I got the following for each test (including just one to save your eyes).

    C:\STRAWB~1\cpan\build\Tcl-1.02-DZAeQs>dmake test "C:\Strawberry\perl\bin\perl.exe" "-MExtUtils::Command::MM" "-MTest::H +arness" "-e" "undef *Test::Harness::Switches; test_harness(0, 'blib\l +ib', 'blib\arch')" t/ *.t t/call.t ........... Can't load 'C:\STRAWB~1\cpan\build\Tcl-1.02-DZAeQ +s\blib\arch/auto/Tcl/Tcl.xs.dll' for module Tcl: load_file:The specif +ied procedure could not be found at C:/Strawberry/perl/lib/DynaLoader +.pm line 193. at t/call.t line 6. Compilation failed in require at t/call.t line 6. BEGIN failed--compilation aborted at t/call.t line 6. t/call.t ........... Dubious, test returned 255 (wstat 65280, 0xff00) No subtests run

    In addition I was presented with the windows error message "The procedure entry point inflateGetHeader could not be located in the dynamic link library zlib1.dll"

    zlib1.dll is included in c:\Tcl\bin, but without a corresponding library in c:\Tcl\lib

    I ran the following code to create the symbol list from zlib1.dll, and indeed the symmbol inflateGetHeader is included in zlib1.def. I also created libzlib1.a

    C:\Tcl\lib>gendef C:\Tcl\bin\zlib1.dll * [C:\Tcl\bin\zlib1.dll] Found PE+ image C:\Tcl\lib>dlltool --kill-at --input-def zlib1.def --output-lib zlib1. +lib C:\Tcl\lib>

    I then went through dmake clean, perl Malefile.PL, dmake and dmake test again. Same result.

    I also tried adding libzlib1.a as an additional library in the makefile so that the output from perl Makefile.pl is

    tclsh=C:/Tcl/bin/tclsh.exe tclConfig.sh=C:/Tcl/lib/tclConfig.sh tcl_library=C:/Tcl/lib/tcl8.6 tcl_version=8.6 LIBS = -LC:/Tcl/lib -ltcl86 -lzlib1 INC = -IC:/Tcl/include DEFINE = Checking if your kit is complete... Looks good Generating a dmake-style Makefile Writing Makefile for Tcl Writing MYMETA.yml and MYMETA.json

    I repeated the dmake and test again, but with same results. Any recommendations on my next steps?

      I ran the following code to create the symbol list from zlib1.dll, and indeed the symmbol inflateGetHeader is included in zlib1.def. I also created libzlib1.a

      I can only think that a different zlib1.dll (one that doesn't export that function, and is elsewhere in your PATH) has been loaded.

      Try renaming the zlib1.dll in C:/Tcl/bin to (eg) zlib1.dll_hide, and see if that makes any difference to the errors you're getting.
      If it does make a difference, then that means that the C:/Tcl/bin/zlib1.dll is probably the dll that was being loaded. But if it makes no difference, then there's probably another zlib1.dll that's being loaded.

      The import lib you subsequently created is not needed as the build (dmake) stage did not contain any code that directly referenced any zlib functions, and the Tcl dll will automatically load the zlib functions (if they're present in the zlib dll).
      If that import lib had been needed then the 'dmake' stage would have failed initially.

      Cheers,
      Rob

        Try renaming ...

        Simply putting Tcl\bin first in %PATH% ought to suffice

      But is C:\Tcl\bin\ in your %PATH%?