包括用于C/C++的expect/tcl库
Including expect/tcl library for C/C++
最近我发现了一个如何在C++中使用期望库的例子。我试着编译它,但编译器(g++)说tcl8.5/expect.h不存在。所以我尝试包含tcl8.6/expect.h-仍然是相同的错误。我检查了/usr/include/目录,当我注意到没有tcl8.x目录时,我并不感到惊讶。我已经搜索了名称中带有"expect"的文件。以下是我的发现:
/usr/include/expect_tcl.h
/usr/include/expect_comm.h
/usr/include/expect.h
不幸的是,当我试图包括其中任何一个时,我在编译过程中得到了以下错误列表:
> g++ test.cpp -Wall -std=c++0x -ltcl8.6 -lglog -o test
/tmp/cce8k1BA.o: In function `task(std::string const&, std::string const&, std::string const&)':
test.cpp:(.text+0x16): undefined reference to `exp_is_debugging'
test.cpp:(.text+0x20): undefined reference to `exp_timeout'
test.cpp:(.text+0x38): undefined reference to `exp_popen'
etc...
我该如何解决这个问题?
[EDIT]当我试图将它与expectlib(-xspect)链接时,我得到了以下错误:
/usr/bin/ld: cannot find -lexpect
collect2: error: ld returned 1 exit status
我确信-tcl8.6和expect5.45-4都已安装。
现在常见的分发Expect的方式是将共享库放在一个非标准的位置,load
通过完整路径名对其进行动态分配。这样做效果很好,对大多数人来说也没什么大惊小怪的,但确实让在自己的代码中使用Expect的C接口变得相当困难。
最简单的方法是从源代码构建自己的副本,尤其是这样可以让你控制它是如何构建的。这尤其包括将大多数符号保留在库中,而不是在安装时剥离它们,这将对调试有很大帮助。您可能应该使用当前支持的版本。(是的,这是几年前的版本。大多数时候它不需要太多的支持。)
您在构建过程中没有链接到expect
库。将-lexpect
添加到g++
命令中。
相关文章:
- 如何在C++代码上使用 Tcl-C API
- 自动打印出哪个 EXPECT 语句失败
- 函数 C++>Tcl 与 Critcl
- 为什么<T> LLVM 中的预期为 Expect&&... 实现两个构造函数<T>?
- 将 Tcl 中的命令输出重定向到文件时,文件以 DOS 格式生成
- Tcl 文件事件挂在 64 位版本的 Tcl 上
- 如何将C 中的后端写入与TCL/TCK用户界面连接
- swig:std/multimap.i似乎打破了TCL包装
- TCL文件无法获取通过代码设置的环境变量
- 使用正在调用TCL脚本的CPP代码的GCC编译
- 使用 TCL 编写嵌入式 SQLite 脚本
- 协议缓冲区测试C++:期望/tcl/tk
- Vera TCL规则:列出所有本地变量
- 需要在 c++ 中从另一个文件调用 tcl proc
- 编译 TCL-DLL 包装器时出现的问题
- TCL高管的程序运行正常
- 为什么并行执行Tcl_ExprDouble的独立Tcl解释器需要互斥
- Swig:如何返回从C++到Tcl的指针列表
- C++应用程序使用TCL API启用程序包自动加载
- 包括用于C/C++的expect/tcl库