2013-03-08 2 views
4

TNonblockingServer를 만드는 코드를 컴파일하려고하는데 다음과 같은 컴파일 오류가 발생합니다. 어떤 생각이 잘못된거야?apache :: thrift :: server :: TNonblockingServer에 대한 정의되지 않은 참조를 절약합니다.

something_server.cpp:(.text+0x1ad): undefined reference to `apache::thrift::server::TNonblockingServer::serve()' 
something_server.cpp:(.text+0x1c1): undefined reference to `apache::thrift::server::TNonblockingServer::~TNonblockingServer()' 
something_server.cpp:(.text+0x280): undefined reference to `apache::thrift::server::TNonblockingServer::~TNonblockingServer()' 

절약을 설치하는 동안 여기서 설명한 단계를 수행했습니다. http://thrift.apache.org/docs/install/os_x/

는 여기에 우리가 명령을 컴파일에 -lthriftnb를 추가하는 경우,이 문제를 해결, 드미트리으로 지적 내 메이크

GEN_SRC := Something.cpp something_constants.cpp something_types.cpp 
GEN_OBJ := $(patsubst %.cpp,%.o, $(GEN_SRC)) 

THRIFT_DIR := /usr/local/include/thrift 
BOOST_DIR := /usr/local/include 

INC := -I$(THRIFT_DIR) -I$(BOOST_DIR) 

.PHONY: all clean 

all: something_server something_client 

%.o: %.cpp 
    $(CXX) -Wall -DHAVE_INTTYPES_H -DHAVE_NETINET_IN_H $(INC) -c $< -o [email protected] 

something_server: something_server.o $(GEN_OBJ) 
    $(CXX) $^ -o [email protected] -L/usr/local/lib -lthrift 

something_client: something_client.o $(GEN_OBJ) 
    $(CXX) $^ -o [email protected] -L/usr/local/lib -lthrift 

clean: 
    $(RM) *.o something_server something_client 
+0

라이브러리를 연결하지 않아서 일반적인 연결 문제가있는 것 같습니다. 어떻게 컴파일하고 링크하고 있습니까? – comocomocomocomo

+0

질문을 편집하고 makefile을 추가했습니다. –

+8

-lthriftnb 라이브러리를 파일에 추가하려고 시도합니다. – Dmitry

답변

1

입니다. 이러한 누락 된 참조는 libthriftnb.so에 있습니다.이 파일에는 libevent에 대한 참조가 있습니다. 그래서 명령어 컴파일에 -levent을 포함해야했습니다. -levent없이 링커는 여러 오류 메시지를 생성합니다. 일부 메시지는 다음과 같습니다. -

/usr/local/lib/libthriftnb.so: undefined reference to `event_set' 
/usr/local/lib/libthriftnb.so: undefined reference to `evbuffer_new' 
/usr/local/lib/libthriftnb.so: undefined reference to `evhttp_free' 
. 
. 
. 
. 
/usr/local/lib/libthriftnb.so: undefined reference to `event_del' 
관련 문제