Tcl-C - 当 [=10th=] 来自 C 的 Tcl 解释器时,不需要特定的包
Tcl-C - can't require specific package when running Tcl Interperter from C
我想用 Tcl 扩展我的 C/C++ 应用程序。
我编写了以下应该创建 Tcl Interpreter 的代码,但我希望它加载位于 ./user/tcl8.6.6/lib 中的用户包。
问题是我的程序没有加载任何东西就存在。
因此,在我调试程序后,我看到在 运行 应该需要我的包的行之后的解释器中的结果是:*myinterp = {result = 0x647d58 "can't find package user", freeProc = 0x0, errorLine = 1}
我假设此行调用的 Tcl Interperter 位于其 lib 子文件夹下没有此包的某个地方。
所以我的问题是如何查看调用的 shell 的路径(可能与 TCL_LIBRARY 或其他环境变量有关?)以及如何更新它或添加到文件夹的位置包含我的 C 代码中的用户包??
这是我写的代码:
int main() {
Tcl_Interp *myinterp;
int status;
printf ("Your Program will run ... \n");
myinterp = Tcl_CreateInterp();
std::string test = "package require user";
status = Tcl_Eval(myinterp,test.c_str());
std::string test = "set a 5";
status = Tcl_Eval(myinterp,test.c_str());
printf ("Your Program has completed\n");
return 0;
}
Tcl 初始化从 TCLLIBPATH
环境变量加载包的位置,如果已定义,则必须包含目录的 Tcl 列表以搜索 pkgIndex.tcl
文件(定义如何加载包实现).但是,在您的应用程序中,如果您知道库包的位置,则应该将该位置附加到 auto_path
全局变量的列表中:
std::string libLocation = "/some/directory/I/know";
Tcl_SetVar(interp, "auto_path", libLocation.c_str(),
TCL_GLOBAL_ONLY | TCL_APPEND_VALUE | TCL_LIST_ELEMENT);
在创建解释器之后但在评估脚本之前执行此操作。
能避免就不要设置TCL_LIBRARY
。它定义了 Tcl 从哪里得到它的 internal 库脚本。我想如果你嵌入 Tcl 而不是单独安装它,你可能需要设置它,但这不是找到非内置包的地方。
我想用 Tcl 扩展我的 C/C++ 应用程序。 我编写了以下应该创建 Tcl Interpreter 的代码,但我希望它加载位于 ./user/tcl8.6.6/lib 中的用户包。
问题是我的程序没有加载任何东西就存在。
因此,在我调试程序后,我看到在 运行 应该需要我的包的行之后的解释器中的结果是:*myinterp = {result = 0x647d58 "can't find package user", freeProc = 0x0, errorLine = 1}
我假设此行调用的 Tcl Interperter 位于其 lib 子文件夹下没有此包的某个地方。
所以我的问题是如何查看调用的 shell 的路径(可能与 TCL_LIBRARY 或其他环境变量有关?)以及如何更新它或添加到文件夹的位置包含我的 C 代码中的用户包??
这是我写的代码:
int main() {
Tcl_Interp *myinterp;
int status;
printf ("Your Program will run ... \n");
myinterp = Tcl_CreateInterp();
std::string test = "package require user";
status = Tcl_Eval(myinterp,test.c_str());
std::string test = "set a 5";
status = Tcl_Eval(myinterp,test.c_str());
printf ("Your Program has completed\n");
return 0;
}
Tcl 初始化从 TCLLIBPATH
环境变量加载包的位置,如果已定义,则必须包含目录的 Tcl 列表以搜索 pkgIndex.tcl
文件(定义如何加载包实现).但是,在您的应用程序中,如果您知道库包的位置,则应该将该位置附加到 auto_path
全局变量的列表中:
std::string libLocation = "/some/directory/I/know";
Tcl_SetVar(interp, "auto_path", libLocation.c_str(),
TCL_GLOBAL_ONLY | TCL_APPEND_VALUE | TCL_LIST_ELEMENT);
在创建解释器之后但在评估脚本之前执行此操作。
能避免就不要设置TCL_LIBRARY
。它定义了 Tcl 从哪里得到它的 internal 库脚本。我想如果你嵌入 Tcl 而不是单独安装它,你可能需要设置它,但这不是找到非内置包的地方。