如何在Tcl C API中链接tclOO函数?链接报错求助
解决Tcl 8.6中
Tcl_GetObjectFromObj的链接错误问题 这个问题我之前也碰到过,其实解决方案很简单——你需要在编译命令中额外链接tcloo库,修改后的编译命令如下:
gcc main.c -o tclOOTest -ltcl -ltcloo
原因解释
虽然Tcl 8.6确实把OO功能整合进了核心发行版,但像Tcl_GetObjectFromObj这类OO相关的C API并没有放在主libtcl库中,而是单独打包在libtcloo库(Unix/Linux下是libtcloo.so,Windows下是tcloo.lib)里。主libtcl库只包含基础的Tcl核心功能,OO的C接口需要单独链接对应的库才能正常解析符号。
额外小技巧
如果你的系统安装了pkg-config,可以用它自动获取正确的编译和链接参数,避免手动记库名:
gcc main.c -o tclOOTest $(pkg-config --cflags --libs tcl tcloo)
你的测试代码与错误信息回顾
测试代码:
#include <tcl.h> #include <tclOO.h> int main(void) { Tcl_Interp *interp = Tcl_CreateInterp(); Tcl_Obj *obj = Tcl_NewStringObj("myObject", -1); Tcl_Object object = Tcl_GetObjectFromObj(interp, obj); return 0; }
报错信息:
/tmp/ccZnpdY8.o: In function
main': main.c:(.text+0x33): undefined reference toTcl_GetObjectFromObj'
collect2: error: ld returned 1 exit status
内容的提问来源于stack exchange,提问作者ratchet
相关产品推荐
相关产品推荐

