我想用Tcl扩展我的C/C++应用程序。我编写了以下代码来创建Tcl解释器,但我希望它加载位于./ 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;
 }发布于 2018-11-18 18:48:15
Tcl初始化从TCLLIBPATH环境变量加载包的位置,如果定义该变量,则必须包含用于搜索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从何处获取其内部库脚本。我想,如果您正在嵌入Tcl,并且没有单独安装Tcl,您可能需要设置它,但这不是可以找到非内置包的地方。
https://stackoverflow.com/questions/53363908
复制相似问题