Strawberry Perl: не могу собрать модуль Tcl - PullRequest
0 голосов
/ 27 мая 2018

У меня проблемы с сборкой модуля Tkx с помощью Strawberry Perl на платформе Windows 10.Это терпит неудачу на зависимости Tcl.Ошибки:

Tcl.o:Tcl.c:(.text+0x65): undefined reference to `__imp_Tcl_GetStringFromObj'
Tcl.o:Tcl.c:(.text+0x15e): undefined reference to `__imp_Tcl_ListObjGetElements'
Tcl.o:Tcl.c:(.text+0x1fb): undefined reference to `__imp_Tcl_GetStringFromObj'
Tcl.o:Tcl.c:(.text+0x29a): undefined reference to `__imp_Tcl_GetByteArrayFromObj'
Tcl.o:Tcl.c:(.text+0x4bf): undefined reference to `__imp_Tcl_NewStringObj'
Tcl.o:Tcl.c:(.text+0x538): undefined reference to `__imp_Tcl_NewDoubleObj'
Tcl.o:Tcl.c:(.text+0x58f): undefined reference to `__imp_Tcl_NewStringObj'
Tcl.o:Tcl.c:(.text+0x5d7): undefined reference to `__imp_Tcl_NewByteArrayObj'
Tcl.o:Tcl.c:(.text+0x621): undefined reference to `__imp_Tcl_NewListObj'
Tcl.o:Tcl.c:(.text+0x643): undefined reference to `__imp_Tcl_ListObjAppendElement'
Tcl.o:Tcl.c:(.text+0x6a1): undefined reference to `__imp_Tcl_NewObj'
Tcl.o:Tcl.c:(.text+0x6af): undefined reference to `__imp_Tcl_ListObjAppendElement'
Tcl.o:Tcl.c:(.text+0x6d1): undefined reference to `__imp_Tcl_NewIntObj'
Tcl.o:Tcl.c:(.text+0x786): undefined reference to `__imp_Tcl_NewByteArrayObj'
Tcl.o:Tcl.c:(.text+0x839): undefined reference to `__imp_Tcl_WrongNumArgs'

и многие, многие другие подобные ошибки.Я искал, но не нашел ничего даже близко.Версия Strawberry Perl - 5.26.4, и я выполнил рекомендованную

cpan Tkx

. При попытке собрать модуль Tcl самостоятельно, я получаю те же ошибки:

cpan Tcl

У меня есть ActiveTclустановлен, но Strawberry Perl, похоже, его не видит.

Как получить работающий модуль Tcl для Strawberry Perl?

1 Ответ

0 голосов
/ 27 мая 2018

Мне удалось заставить сборку работать на Strawberry Perl 5.26.(В пакете binutils, входящем в комплект 5.24, похоже, есть ошибка, из-за которой он не распознает .lib файлы из Tcl.)

Кажется, проблема в

Warning (mostly harmless): No library found for -ltcl86

в сборке vanillaпотому что эта библиотека определенно требуется.В моем C:\ActiveTcl\lib действительно нет tcl86.lib, но есть tcl86t.lib.

Итак ...

  1. Выполнить cpan.Это бросит вас в оболочку cpan.
  2. Запустите look Tcl.Это загружает модуль Tcl (при необходимости) и помещает вас в оболочку cmd в каталоге сборки.
  3. Редактируйте Makefile.PL с помощью вашего любимого редактора.
  4. Вокруг строки 183 должно бытьбыть строкой следующего содержания:

            $libpath .= " -ltcl$buildtype$tclver";
    

    Добавьте следующую строку после нее:

            $libpath .= "t";
    
  5. Сохраните и выйдите из редактора.

  6. Запустите perl Makefile.PL.Теперь нужно использовать -ltcl86t.
  7. Введите exit в оболочке cmd, чтобы вернуться к оболочке cpan.
  8. Запустить install Tcl.Это должно пройти успешно.
  9. Введите exit снова, чтобы выйти из оболочки cpan.
...