Strawberry Perl v5.30.0 не может установить Tcl (Windows 10) - PullRequest
1 голос
/ 25 октября 2019

Я скачал и установил strawberry-perl-5.30.0.1-64bit.msi из strawberryperl.com на мою Windows 10 и попытался установить модуль Tcl с помощью cpan, но он не работает из-за отсутствия tclsh. В чем может быть проблема?

C:\Strawberry>cpan Tcl
Loading internal logger. Log::Log4perl recommended for better logging
CPAN: CPAN::SQLite loaded ok (v0.217)
Database was generated on Thu, 24 Oct 2019 12:40:15 GMT
Running install for module 'Tcl'
CPAN: Digest::SHA loaded ok (v6.02)
CPAN: Compress::Zlib loaded ok (v2.086)
Checksum for C:\STRAWB~1\cpan\sources\authors\id\V\VK\VKON\Tcl-1.27.tar.gz ok
CPAN: Archive::Tar loaded ok (v2.32)
CPAN: YAML::XS loaded ok (v0.78)
CPAN: CPAN::Meta::Requirements loaded ok (v2.140)
CPAN: Parse::CPAN::Meta loaded ok (v2.150010)
CPAN: CPAN::Meta loaded ok (v2.150010)
CPAN: Module::CoreList loaded ok (v5.20190522)
Configuring V/VK/VKON/Tcl-1.27.tar.gz with Makefile.PL
'tclsh' is not recognized as an internal or external command,
operable program or batch file.
error starting tclsh: $?=256; $!=
No 'Makefile' created  VKON/Tcl-1.27.tar.gz
  C:\Strawberry\perl\bin\perl.exe Makefile.PL -- NOT OK
Stopping: 'install' failed for 'Tcl'.

C:\Strawberry>dir C:\Strawberry\cpan\build\Tcl-1.27-0
 Volume in drive C is OSDisk
 Volume Serial Number is BCC0-703E

 Directory of C:\Strawberry\cpan\build\Tcl-1.27-0

25.10.2019  13.05    <DIR>          .
25.10.2019  13.05    <DIR>          ..
14.07.2018  11.00             5 207 Changes
22.08.2018  11.21            10 139 Makefile.PL
22.08.2018  11.45             1 723 MANIFEST
22.08.2018  11.45             1 140 META.json
22.08.2018  11.44               617 META.yml
14.07.2018  20.26             1 246 README
25.10.2019  13.05    <DIR>          t
25.10.2019  13.05    <DIR>          tcl-core
22.08.2018  11.43            43 540 Tcl.pm
22.08.2018  10.57            46 049 Tcl.xs
16.06.2018  15.18               439 tclcfg.tcl
16.06.2018  15.18                48 typemap
              10 File(s)        110 148 bytes
               4 Dir(s)  316 953 681 920 bytes free

1 Ответ

0 голосов
/ 31 октября 2019

Вы можете построить отсутствующую зависимость tclsh, загрузив исходный дистрибутив из https://prdownloads.sourceforge.net/tcl/tcl8420-src.zip. Для компиляции исходного кода вам нужен компилятор Си. Я попробовал выпуск Visual Studio для сообщества: https://visualstudio.microsoft.com/vs/

  • Нажмите кнопку загрузить выпуск сообщества ..

  • Затем выберите, что установить

  • Затем нажмите «Установить»

После установки перейдите в меню «Инструменты-> Командная строка-> Командная строка разработчика» и запустите

nmake -f makefile.vc

из подпапки win извлеченного исходного дистрибутива Tcl (на моем компьютере он был расположен по адресу C:\Users\Bruker\tcl\tcl8.4.20\win)

Приведенная выше команда nmake создает новую папку Release_VC13с исполняемым файлом tclsh84.exe. Обратите внимание, что имя исполняемого файла не tclsh.exe.

Теперь добавьте папку исполняемого файла в системную переменную среды PATH: C:\Users\Bruker\tcl\tcl8.4.20\win\Release_VC13, затем закройте командную строку и откройте заново, чтобы обновить параметры пути.

Попробуйте ввести tclsh84, и вы должны получить командную строку оболочки tcl с ведущей % подсказкой. Затем введите exit для выхода из оболочки tcl.

Следующая проблема - установить модуль Tcl с помощью Strawberry Perl. Сначала пытаемся запустить:

> cpan Tcl
[...]
'tclsh' is not recognized as an internal or external command,
operable program or batch file.
error starting tclsh: $?=256; $!=
No 'Makefile' created  VKON/Tcl-1.27.tar.gz
  C:\Strawberry\perl\bin\perl.exe Makefile.PL -- NOT OK
Stopping: 'install' failed for 'Tcl'.

Проблема в том, что исполняемый файл называется не tclsh, а tclsh84 (см. Выше).

Следующее, что я сделал, это загрузил исходный дистрибутив для модуля Tcl:

> cpan -g Tcl

Затем извлек скачанный файл Tcl-1.27.tar.gz и перешел в исходный каталог дистрибутива. Изучив Makefile.PL, я обнаружил, что Makefile.PL принял аргумент командной строки --tclsh, который дал имя команды оболочки tcl. Поэтому я попытался:

> perl Makefile.PL --tclsh=tclsh84

, и теперь это работало нормально. Затем я попытался скомпилировать с gmake (который поставляется с дистрибутивом Strawberry Perl):

> gmake

Это также сработало, но запустить gmake test не удалось, а также установить и протестировать модуль:

> gmake install  
> perl -MTcl -e1
failed dlopen(C:/Users/Bruker/tcl/tcl8.4.20/win/Release_VC13/tcl84.dll,...);
failed dlopen(./tcl84.dll,...);
failed dlopen(tcl84.dll,...);
trying dlopen(tcl89.dll,...)
trying dlopen(tcl88.dll,...)
trying dlopen(tcl87.dll,...)
trying dlopen(tcl86.dll,...)
trying dlopen(tcl85.dll,...)
trying dlopen(tcl84.dll,...)
trying dlopen(tcl83.dll,...)
trying dlopen(tcl82.dll,...)
trying dlopen(tcl81.dll,...)
trying dlopen(tcl80.dll,...)
failed all posible tcl vers 8.x from 9 down to 0 at C:/Strawberry/perl/lib/XSLoader.pm line 111.
Failed to load Tcl dll! at C:/Strawberry/perl/lib/XSLoader.pm line 111.
Unable to initialize Tcl at C:/Strawberry/perl/lib/XSLoader.pm line 111.
Compilation failed in require.
BEGIN failed--compilation aborted.

Я планирую вернуться к этой проблеме позже и продолжить расследование.

...