Tcl - как загрузить Memchan связанное статически? - PullRequest
0 голосов
/ 10 мая 2011

Я пытаюсь использовать пакет Memchan в моем приложении. Я был в состоянии скомпилировать и связать его статически. Но, к сожалению, я не знаю, как загрузить этот пакет в моем приложении.

% rs
Internal error detected during start: can't find package Memchan
can't find package Memchan
    while executing
"package require Memchan"

Я проследил это до каталога pkgIndex.tcl в Memchan2.3:

% cat pkgIndex.tcl
package ifneeded Memchan 2.3  [list load [file join $dir libMemchan2.3.so]]

У меня два вопроса:

  • Как загрузить статически связанную версию libMemchan2.3.a?
  • Существует ли специальный синтаксис для вызова package require Memchan при вызове статически связанной библиотеки?

1 Ответ

1 голос
/ 10 мая 2011

У вас есть статически связанный пакет memchan?Ну, это означает, что вам нужен другой индекс пакета, содержимое которого должно быть таким:

package ifneeded Memchan 2.3 {load {} Memchan}

load имеет пустой первый аргумент, так что рассматриваются статически связанные библиотеки, но без имени файла, aВторой аргумент необходим для того, чтобы найти функцию инициализации (которая будет Memchan_Init с указанным выше значением).

В качестве альтернативы, просто сделайте это в начале вашего скрипта:

load {} Memchan

Это приведет к тому, что внутренний package provide будет выполнен в любом случае, так что любые будущие package require Memchan s будут сразу же успешными на том основании, что пакет уже используется.


[Справочная информация]: Как вы можете видеть, индексный файл пакета на самом деле очень прост: он просто предоставляет некоторые инструкции, чтобы сказать, что если вам нужен конкретный пакет определенной версии, вот скрипт, который сделает его доступным.Единственный реальный нюанс состоит в том, что переменная $dir описывает местоположение файла индекса пакета во время загрузки файла.

...