我想我已经摆脱了它。你是对的。问题出在我使用的包含方法上。我有文件 tcl.h、tclDecls.h 和 tclPlatDecls.h 包含在 c 代码中,但这些文件在路径 /usr/include 中不存在,所以我将这些文件复制到该目录,可能不是正确的办法。最后我没有将这些文件复制到 /usr/include 并在编译时给出了包含路径。我已经创建了可执行文件,它在终端上给出了正确的结果。谢谢你的帮助。
这是我正在使用的确切 c 代码:
#include <tcl.h>
#include <tclDecls.h>
#include <tclPlatDecls.h>
#include <stdio.h>
#include <stdlib.h>
#include <string.h>
int main (int argc, char **argv) {
Tcl_Interp *interp;
int code;
char *result;
printf("inside main function \n");
// Tcl_InitStubs(interp, "8.5", 0);
Tcl_FindExecutable(argv[0]);
interp = Tcl_CreateInterp();
code = Tcl_Eval(interp, "source simple_addition.tcl; add_two_nos");
/* Retrieve the result... */
result = Tcl_GetString(Tcl_GetObjResult(interp));
/* Check for error! If an error, message is result. */
if (code == TCL_ERROR) {
fprintf(stderr, "ERROR in script: %s\n", result);
exit(1);
}
/* Print (normal) result if non-empty; we'll skip handling encodings for now */
if (strlen(result)) {
printf("%s\n", result);
}
/* Clean up */
Tcl_DeleteInterp(interp);
exit(0);
}
并编译此代码并生成可执行文件,我使用以下命令:
gcc simple_addition_wrapper_new.c -I/usr/include/tcl8.5/ -ltcl8.5 -o simple_addition_op
我已经执行了文件 simple_addition_op 并得到了以下正确的结果
inside main function
c is 30 .......
我特别感谢 Donal Fellows 和 Johannes