我正在使用在C++中实现的tcl包并将其作为静态库(应用程序很早以前开发)链接的应用程序。它下面:包需要使用静态库
// 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没有被调用。我期待他们必须从package require testlib中调用。根据我的理解,每个软件包必须在auto_path或tcl_pkgPath中包含pkgIndex.tcl,它必须包含行 (package ifneeded testlib 1.6 {load {} testlib}),但这里两个变量都不包含这样的索引文件。
这是提供软件包的正确方法吗?是否有与使用静态库提供软件包相关的文档?