2014-10-23 2 views
0

최근에 C++에서 expect 라이브러리를 사용하는 방법에 대해 example이 발견되었습니다. 나는 그것을 컴파일하려했지만, 컴파일러 (g ++)는 tcl8.5/expect.h가 존재하지 않는다고 말했다. 그래서 나는 tcl8.6/expect.h를 포함하려고 시도했다 - 여전히 같은 오류. 나는/usr/include/디렉토리를 점검했고, tcl8.x 디렉토리가 없다는 것을 알아 차렸을 때 놀라지 않았다. 이름에 "expect"가 포함 된 파일을 검색했습니다. 여기에 내가 무엇을 발견 :C/C++ 용 expect/tcl 라이브러리 포함

/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... 

가 어떻게이 문제를 해결할 수 있습니까? - tcl8.6 및 5.45을 기대

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

나는 모두가 확신 : 나는 기대 LIB (-lexpect)와 연결을 시도 할 때

[편집] 나는 다음과 같은 오류가 발생했습니다 -4가 설치됩니다.

답변

1

요즘 Expect를 배포하는 일반적인 방법은 공유 라이브러리를 비표준 위치에두고 전체 경로 이름으로 load 동적으로 배치합니다. 이것은 잘 작동하고 대부분의 사람들에게는 최소한의 소란이지만 Expect의 C 인터페이스를 자신의 코드에서 사용하는 것은 다소 어렵습니다.

가장 쉬운 방법은 소스에서 사용자 자신의 복사본을 만드는 것입니다. 특히 그것이 빌드 된 방법을 제어 할 수있는 가장 쉬운 방법입니다. 이것은 특히 심볼을 설치시 제거하는 대신 라이브러리에 보관하는 것을 포함합니다. 이는 디버깅에 많은 도움이됩니다. 아마 current supported version을 사용해야합니다. (예, 몇 년 전부터 릴리스 된 것입니다. 대부분의 시간에 많은 지원 노력이 필요하지 않습니다.)

1

빌드하는 동안 expect 라이브러리에 연결하지 않았습니다. g++ 명령에 -lexpect을 추가하십시오.

+0

실제로 링크를 시도했지만 다음 오류가 있습니다./usr/bin/ld : can not find -lexpect –

+0

저는 리눅스 빌드 체인에 익숙하지 않은데, 라이브러리를 제대로 설치하지 않았거나 링커가 어디에서 찾을 지 알지 못합니다. 'expect-dev'를 설치 했습니까? 라이브러리에서 드라이브를 검색하고 그 라이브러리가 어디에 있는지보고 링커가 찾을 수없는 이유를 찾아 낼 수 있습니까? – aardvarkk

+0

아쉽게도 배포판에는 expect-dev라는 패키지가 없습니다 (아치 리눅스). 그리고 전에 말했듯이, 저는 이미이 라이브러리를 검색했습니다. 내가 찾은 유일한 파일은 위의 질문에 나열되어 있습니다. –