2017-05-21 3 views
0

절약 0.9.1 cpp 코드를 컴파일 할 때 문제가 있습니다. 이 같은Cpp : Apache :: thrift :: transport :: TSocket :: TSocket (std :: string const &, int)에 대한 정의되지 않은 참조

내 메이크 :

objects = genFeaVec_multiThread_HSV.o imgIDservice_types.o ImgIDdifNameService.o 

genFeaVec_multiThread_HSV_thrift : $(objects) 


g++ -o genFeaVec_multiThread_HSV_thrift $(objects) -I/usr/include -L/usr/lib64 -lopencv_calib3d -lopencv_features2d -lopencv_highgui -lopencv_video -lopencv_imgproc -lopencv_core -lthrift 

컴파일러 g ++의 그 이야기 :

g++ -o genFeaVec_multiThread_HSV_thrift genFeaVec_multiThread_HSV.o imgIDservice_types.o ImgIDdifNameService.o -I/usr/include -L/usr/lib64 -lopencv_calib3d -lopencv_features2d -lopencv_highgui -lopencv_video -lopencv_imgproc -lopencv_core -I/usr/include/ -L/usr/lib64 -lthrift -lthriftnb -levent 
undefined reference to `apache::thrift::transport::TSocket::TSocket(std::string const&, int)' 

내 CPP 코드는 다음과 같다 : (i가 host_i.c_str을 시도

std::string host_i=string("localhost"); 
boost::shared_ptr<TTransport> socket(new TSocket(host_i,9537)); 

) 및 "localhost"하지만 작동하지 않습니다. 는 그리고 lib 디렉토리 -lthrift을 확인했다 :

nm -CD /usr/lib64/libthrift-0.9.1.so | grep TSocket 

`00000000000670f0 T apache::thrift::transport::TSocket::TSocket(int) 
0000000000066ea0 T apache::thrift::transport::TSocket::TSocket(std::string) 
0000000000066d80 T apache::thrift::transport::TSocket::TSocket(std::string, int) 
0000000000066fc0 T apache::thrift::transport::TSocket::TSocket() 
00000000000670f0 T apache::thrift::transport::TSocket::TSocket(int) 
0000000000066ea0 T apache::thrift::transport::TSocket::TSocket(std::string) 
0000000000066d80 T apache::thrift::transport::TSocket::TSocket(std::string, int)` 

(가) 파일이 확인되어 있습니다. dir

나는 문제가 여전히 lib를 가져 오는 방법이라고 생각합니다. 하지만 makefile에 어떤 문제가 있는지 알지 못합니다.

+0

및 시도해도 -lthriftnd, 작동하지 않습니다 ... – timruning

답변

0

-lthrift이 아니라 stdlib libc++을 사용해보십시오.

+0

-lstdC++? 아직도 일할 수 없습니다. – timruning