Включая библиотеку Expect / Tcl для C / C ++

0

Недавно я нашел пример использования библиотеки ожиданий в 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.

Теги:
tcl
expect
include-path

2 ответа

1
Лучший ответ

Обычный способ распространения Expect в эти дни ставит общую библиотеку в нестандартное место и динамически load полный путь. Это хорошо работает и является минимальной проблемой для большинства людей, но делает довольно сложным использование интерфейса Expect C в вашем собственном коде.

Самый простой способ - создать свою собственную копию из источника, тем более что это даст вам контроль над тем, как именно она была построена. Это может включать, в частности, сохранение большинства символов в библиотеке, а не удаление их при установке, что очень поможет в отладке. Вероятно, вы должны использовать текущую поддерживаемую версию. (Да, это релиз от нескольких лет назад. В большинстве случаев это не требует большой поддержки).

1

Вы не связаны с expect библиотеки во время сборки. Добавьте -lexpect к вашей g++.

  • 0
    На самом деле я пытался связать его, но я получил следующую ошибку: / usr / bin / ld: не могу найти -lexpect
  • 0
    Я не слишком знаком с цепочками сборки Linux, но могу предположить, что вы либо неправильно установили библиотеку, либо ваш компоновщик не знает, где ее искать. Вы установили expect-dev ? Можете ли вы найти на вашем диске библиотеку, посмотреть, где она находится, и выяснить, почему ваш компоновщик не может ее найти?
Показать ещё 2 комментария

Ещё вопросы

Сообщество Overcoder
Наверх
Меню