Недавно я нашел пример о том, как использовать библиотеку ожидаемых в C ++. Я пытался скомпилировать его, но компилятор (g ++) сказал, что tcl8.5 / wait.h не существует. Поэтому я попытался включить tcl8.6 / Ожидаем. Ч — все та же ошибка. Я проверил каталог / usr / include / и не удивился, когда заметил, что каталога tcl8.x нет.
Я искал файлы с «ожидаемо» в названии. Вот что я нашел:
/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...
Как я могу решить эту проблему?
[РЕДАКТИРОВАТЬ]
Когда я попытался связать его с ожидаемым lib (-lexpect), я получил следующую ошибку:
/usr/bin/ld: cannot find -lexpect
collect2: error: ld returned 1 exit status
Я уверен, что оба — tcl8.6 и ожидают 5.45-4 установлены.
Обычный способ распространения Expect в эти дни помещает общую библиотеку в нестандартное место и load
динамически по полному пути. Это работает хорошо и является минимальной суетой для большинства людей, но делает довольно трудным использование интерфейса Expect C в вашем собственном коде.
Самый простой способ будет создать свою собственную копию из источника, тем более что это даст вам контроль над тем, как именно она была построена. В частности, это может включать сохранение большинства символов в библиотеке вместо удаления их при установке, что очень поможет при отладке. Вы, вероятно, должны использовать текущая поддерживаемая версия. (Да, это релиз, выпущенный несколько лет назад. Большую часть времени он не требует больших усилий поддержки.)
Вы не связаны с expect
библиотека во время вашей сборки. добавлять -lexpect
на ваш g++
команда.