Я работаю над приложением, которое использует пакет tcl, реализованный на C++ и связанный как статическая библиотека (приложение давно разработано). Это следующее:пакет требуется со статическим lib
// Library code
extern "C" int testlib_SafeInit _ANSI_ARGS_((Tcl_Interp *interp))
{
return Tcl_PkgProvide(interp, "testlib", "1.6");
}
extern "C" int testlib_Init _ANSI_ARGS_((Tcl_Interp *interp))
{
return testlib_SafeInit(interp);
}
// Application code
extern "C" int testlib_SafeInit _ANSI_ARGS_((Tcl_Interp *interp));
extern "C" int testlib_Init _ANSI_ARGS_((Tcl_Interp *interp));
int main()
{
Tcl_Interp* interp = Tcl_CreateInterp();
Tcl_Init(interp);
Tcl_PkgProvide(interp, "testlib", "1.6");
Tcl_StaticPackage(interp, "testlib", testlib_Init, testlib_SafeInit);
Tcl_Eval(interp, "package require testlib");
std::cout << "Res = " << Tcl_GetStringResult(interp);
return 0;
}
Когда я удаление строки Tcl_PkgProvide (интерп, "testlib", "1,6"); из основного, пакет становится невидимым. Также я заметил, что testlib_Init и testlib_SafeInit не вызываются. Я ожидаю, что они должны быть вызваны из пакета, требующего testlib. Как я понимаю из документов, каждый пакет должен иметь pkgIndex.tcl в auto_path или tcl_pkgPath, который должен содержать строку (пакет ifneeded testlib 1.6 {load {} testlib}), но здесь обе переменные не содержат такой файл индекса.
Это правильный способ предоставления пакетов? Есть ли документация, связанная с предоставлением пакетов с использованием статических библиотек?