Недавно я нашел пример использования библиотеки ожиданий в C++. Я попытался скомпилировать его, но компилятор (g++) сказал, что tcl8.5/expect.h не существует. Поэтому я попытался включить tcl8.6/expect.h - по-прежнему та же ошибка. Я проверил каталог /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...
Как я могу решить эту проблему?
[EDIT] Когда я попытался связать его с ожидающим 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++
.
expect-dev
? Можете ли вы найти на вашем диске библиотеку, посмотреть, где она находится, и выяснить, почему ваш компоновщик не может ее найти?