簡體   English   中英

包括C / C ++的Expect / tcl庫

[英]Including expect/tcl library for C/C++

最近,我找到了一個有關如何在C ++中使用Expect庫的示例 我嘗試編譯它,但是編譯器(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...

我怎么解決這個問題?

[編輯]當我嘗試將其與期望庫(-lexpect)鏈接時,出現以下錯誤:

/usr/bin/ld: cannot find -lexpect
collect2: error: ld returned 1 exit status

我確定-tcl8.6和期望5.45-4都已安裝。

在構建期間,您尚未鏈接到expect庫。 -lexpect添加到您的g++命令。

如今,分發Expect的常用方法是將共享庫放置在非標准位置,並通過完整路徑名動態load它。 這很好用,對大多數人來說很小的麻煩,但是確實使在您自己的代碼中使用Expect的C接口相當困難。

最簡單的方法是從源代碼構建您自己的副本,尤其是這樣可以讓您控制副本的構建方式。 這尤其可以包括將大多數符號保留在庫中,而不是在安裝時剝離它們,這將大大有助於調試。 您可能應該使用當前支持的版本 (是的,它是幾年前的版本。大多數時候不需要很多支持工作。)

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM