2011-09-07 2 views
0

나는 우분투에서 C++ 코드로 작업하고 있습니다. 서버에 연결하기 위해 gsoap을 사용하고 있습니다. 나는 필요한 모든 데이터를 얻었습니다. 또한 서버에 연결하는 데 성공했습니다. 아직도 나는 질문이있다. 왜 커맨드 라인에 다음을 써야합니까 : g ++ test_server.cpp -o testServ libgsoap ++. 내 폴더에 모든 종속성을 포함시킨 경우 내 명령 줄에 libgsoap ++. a를 포함해야하는 이유는 무엇입니까? 편집 :.gsoap - -lcrypt를 사용하여 컴파일

것은 내가 libgsoap ++를 포함하지 않는 경우 명령 줄에서 나는이 :

undefined reference to `soap_embed' 
/tmp/ccyeN0df.o: In function `soap_serialize_string(soap*, char* const*)': 
TEST.cpp:(.text+0xb9de): undefined reference to `soap_reference' 
/tmp/ccyeN0df.o: In function `soap_out_string(soap*, char const*, int, char* const*, char const*)': 
TEST.cpp:(.text+0xba15): undefined reference to `soap_outstring' 
/tmp/ccyeN0df.o: In function `soap_in_string(soap*, char const*, char**, char const*)': 

답변

1

당신은 당신 ++ ++ -lgsoap 사용 libgsoap에 연결하려는 g ++ 말할 필요가있다.

시스템 전체 버전이 아닌 libgsopa ++에 링크하려면 라이브러리 경로를 -L 플래그를 통해 g ++로 지정해야합니다.

간략한 설명 :

링크 시간 오류가 있습니다. 컴파일 작업이 성공적으로 완료되어 오브젝트 파일이 생성되었습니다. 컴파일하는 동안 soap_serialize_string 등이 존재하고 오브젝트 코드를 사용할 수 있다고 약속했다 (gsoap 포함 파일을 포함하여).

이제 링커는 해당 개체 파일에서 실행 파일을 만들려고합니다. 그것은 객체 파일에서 "약속"을 모두 확인하고 그것을 해결하려고 시도합니다 : 실제 함수를 호출하는 것으로 대체하십시오. 이 "실제 기능"은 어디에 존재합니까? 귀하의 경우에는 libgsoap ++입니다.

libgsoap ++ .a와 링크하도록 링커에 지시하지 않으면 약속은 그냥 그대로 남으며 정의되지 않은 참조가 있습니다.

+0

그러나 포함 : .h, .cpp 파일 (soap.h accpuntsoap.h ..)을 사용하여 내 .cpp 파일의 모든 종속 파일을 포함 시켰습니다. 왜 작동하지 않는거야? – sunset

+0

include 파일에서 컴파일 타임 종속성 만 지정합니다. 또한 해당 오브젝트 코드 (이 경우 공유 라이브러리에 있음)와 링크해야합니다. –