我有一个cpp代码,其中包含tcl.h库。我正在尝试使用gcc编译器进行编译。但出现以下错误:
gcc -o top.o -std=c99 top.c
top.c:12: warning: return type defaults to 'int'
/tmp/ccDOTTZQ.o: In function `main':
top.c:(.text+0xa): undefined reference to `Tcl_CreateInterp'
top.c:(.text+0x1f): undefined reference to `Tcl_EvalFile'
top.c:(.text+0x3d): undefined reference to `Tcl_GetVar2Ex'
top.c:(.text+0x75): undefined reference to `Tcl_ListObjGetElements'
top.c:(.text+0xb1): undefined reference to `Tcl_GetString'
top.c:(.text+0xcc): undefined reference to `Tcl_GetInt'
collect2: ld returned 1 exit status
它找不到Cpp-tcl API。请帮助我。
答案 0 :(得分:0)
您的代码未链接到Tcl库,因此显然无法找到这些功能的实现。 (在C和C ++中,与函数的实现的链接与使用这些函数的声明的使用是一个单独的阶段,这是头文件提供的。)
除了您实际上称gcc错误。您需要使用两个步骤,首先使用-c
将源代码编译到目标文件:
gcc -c -o top.o -std=c99 top.c
然后像这样链接结果并生成可执行文件:
gcc -o top.exe -std=c99 top.o -ltcl
对于第一个,您可能需要另外指定一个适当的-I
选项来找到包含文件(如果它们不在标准位置)。对于第二个,您可能需要指定适当的-L
选项来查找库文件(libtcl.so
)。根据系统的不同,您可能还需要指定一些版本号(例如,-ltcl86
或-ltcl8.6
而不是-ltcl
)。这些都是取决于您的构建系统配置的选项,因此很难在此处准确预测。