2013-01-29 2 views
1

Я новичок в Tcl и у меня есть сценарий, который обернут с помощью freewrapTCLSH.exeобернутый Tcl скрипт перестает работать, когда переехал

Сначала, когда началась программа жаловалась, не найдя пакет

Я отредактировал строку, как представляется, «включил» ее в

lappend auto_path ../../lib/crc 

Это работало нормально, и .exe начался без проблем. Но затем я переместил exe в другую папку, и он снова начал жаловаться. Я думал, что как только exe будет создано, все будет сделано. Но, похоже, это не очень хорошо справляется. Сначала весь путь к lib был жестко закодирован в скрипт, а затем все работало нормально. Но поскольку мы не можем полагаться на exe, который всегда строится в той же папке, это должно было быть изменено.

Любые идеи о том, как обойти эту неприятную проблему?

ответ

2

../../lib/crc интерпретируется с использованием текущего рабочего каталога каждый раз при поиске пакета. Имея эту вещь, ваш ::auto_path почти всегда не то, что вы хотите.

Я использую [file dirname [info script]] получить каталог в настоящее время считанного файла Tcl, добавляя относительный путь к некоторому lib/crc с file join, обеспечивая, чтобы получить полный путь к файлу с file normalize. Результатом file normalize является то, что я добавить ::auto_path (или запомнить для использования в будущем каким-либо другим способом):

lappend ::auto_path [file normalize [file join [file dirname [info script]] ../mylib]] 

Это может быть очевидным, но все же: info script возвращает путь к файлу в настоящее время источники, не путь как-то вспомнил, когда файл, содержащий его звонок был получен. Если вы хотите получить текущее местоположение сценария, убедитесь, что это происходит в нужное время (например, сделайте это на верхнем уровне).

+0

Ahhh, thanx. Это решило. – inquam

1

Вы должны доставить необходимый пакет (и зависимости этого пакета) в ваш exe. Обычно это связано только с копированием каталога необходимых пакетов в папку lib в ваших vfs.

Смежные вопросы