0
  1. 软件: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;
    }
    
4

2 回答 2

0

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

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

这为我解决了这个问题。

编辑

你可以传递Tcl_InitTcl_Main(如果你不需要做任何特定的初始化)或者只返回这样的结果Tcl_Init

int Tcl_AppInit(Tcl_Interp *interp)
{
    return Tcl_Init(interp);
}
于 2013-04-04T12:56:12.960 回答
0

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

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

于 2013-04-04T12:27:09.360 回答