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

I'm not sure where the file command comes from. Anyway the size/datetime....

06/06/2015 06:17 181,880 tcl86.lib

I downloaded an sha1sum.exe, here's the result

5b2c87ccbc0838d7c9687f15f5ab6a33f7f77837 C:\Tcl\lib\tcl86.lib

and the results of objdumo

C:\Tcl\lib>objdump -p "C:\Tcl\lib\tcl86.lib" |head In archive C:\Tcl\lib\tcl86.lib: tcl86.dll: file format pe-x86-64 Characteristics 0x0 Time/Date Sat Jun 06 05:37:55 2015 Magic 0000 MajorLinkerVersion 0 MinorLinkerVersion 0

I appreciate your help

Replies are listed 'Best First'.
Re^5: Tcl for Strawberry Perl on Windows 64bit
by Anonymous Monk on Jul 22, 2015 at 00:03 UTC

    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

      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
        But is C:\Tcl\bin\ in your %PATH%?