- 软件:ActiveState ActiveTcl 8.5.13.296436/Win7/DEV C++ 5.4.1。
- ActiveTcl 安装在 D:/TCL/。
错误信息:
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
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; }
问问题
307 次
2 回答
0
在玩了一会儿之后,我可以在 Visual Studio 中重现并解决这个问题。
您只需添加D:\Tcl\lib\tcl86.lib
到“链接器/输入”下的“附加依赖项”。
这为我解决了这个问题。
编辑
你可以传递Tcl_Init
给Tcl_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 回答