【问题标题】:Compiling using gcc of a Cpp code which is calling a TCL script使用调用 TCL 脚本的 Cpp 代码的 gcc 进行编译
【发布时间】:2019-02-28 15:49:47
【问题描述】:

我有一个包含 tcl.h 库的 cpp 代码。我正在尝试使用 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。请帮我解决这个问题。

【问题讨论】:

  • 您必须链接库。像 libtcl.so 之类的东西
  • 我应该使用哪个选项来链接它们以及该对象文件在哪里可用?
  • 我不知道目标文件在哪里。但如果它们位于标准位置,请将 -ltcl 添加到 g++ 编译中。如果它们不在标准位置,请添加-L/path/to/libctl.so注意: -l 选项中,lib 前缀和.so 后缀不应传递
  • 我尝试提供 -ltcl 选项。有效。谢谢。
  • 我还需要从 tcl 脚本中读取本地声明的变量(在 TCL 脚本中)值,还需要从我的 cpp 代码中将值传递给 TCL 脚本。如何做到这一点?

标签: c++ tcl


【解决方案1】:

您的代码没有链接到 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)。这些都是依赖于你的构建系统配置的选项,所以在这里很难准确预测。

【讨论】:

  • 一般来说,人们使用make(或cmake,我无能为力)之类的工具来构建C和C++代码。
猜你喜欢
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 2014-09-09
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 2017-07-16
  • 1970-01-01
相关资源
最近更新 更多