使用带C代码的Tcl库会出错

时间:2013-04-04 11:19:58

标签: tcl dev-c++

  1. softwarre:ActiveState ActiveTcl 8.5.13.296436/Win7/DEV C ++ 5.4.1。
  2. ActiveTcl安装在D:/ TCL /.
  3. 错误信息:

    E:\src\c\tcl\main.oIn function `Tcl_AppInit':
    8E:\src\c\tcl\main.cundefined reference to `_imp__Tcl_Init'
    E:\src\c\tcl\main.oIn function `main':
    14E:\src\c\tcl\main.cundefined reference to `_imp__Tcl_Main'
    E:\src\c\tcl\collect2.exe[Error] ld returned 1 exit status
    26E:\src\c\tcl\Makefile.winrecipe for target 'tcl_test.exe' failed
    
  4. c源代码:

    #include <stdio.h>
    #include <stdlib.h>
    #include <tcl.h>
    #include <tk.h>
    
    int Tcl_AppInit(Tcl_Interp *interp)
    {
        return (Tcl_Init(interp) == (TCL_ERROR))?TCL_ERROR:TCL_OK;
    }
    
    int main(int argc, char** argv)
    {
        printf("--- Tcl Third-Party Shell Start ---\n");
        Tcl_Main(argc, argv, Tcl_AppInit);
        printf("--- Tcl Third-Party Shell End ---\n");
    
        return 0;
    }
    

2 个答案:

答案 0 :(得分:0)

为了访问这些功能(特别是Tcl_Main),必须将您的代码与Tcl DLL(我认为在您的安装中为tcl85.dll)链接起来;它不是通过Tcl的存根链接机制导出的符号。我不确切知道你是如何在Windows上做的(也不知道它将在何处定位)但指示你的构建环境使用DLL应该不会太困难。

FWIW,Tcl_Init始终返回TCL_OK(即0)或TCL_ERROR(即1)。如果您在基本初始化后不打算安装自己的命令和功能,则可以直接从AppInit函数返回值。

答案 1 :(得分:0)

在玩了一下后,我可以在Visual Studio中重现并解决这个问题。

您只需将D:\Tcl\lib\tcl86.lib添加到“链接器/输入”下的“附加依赖项”中。

这解决了我的问题。

修改

您可以将Tcl_Init传递给Tcl_Main(如果您不需要进行任何特定的初始化),或者只返回Tcl_Init的结果:

int Tcl_AppInit(Tcl_Interp *interp)
{
    return Tcl_Init(interp);
}