6

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()'

thrift のインストール中に、ここで説明する手順を実行しました。 http://thrift.apache.org/docs/install/os_x/

ここに私のメイクファイルがあります

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 $@ 

something_server: something_server.o $(GEN_OBJ)
    $(CXX) $^ -o $@ -L/usr/local/lib -lthrift 

something_client: something_client.o $(GEN_OBJ)
    $(CXX) $^ -o $@ -L/usr/local/lib -lthrift 

clean: 
    $(RM) *.o something_server something_client
4

1 に答える 1

3

Dmitry が指摘したように-lthriftnb、コンパイル コマンドに追加すると、問題は解決します。これらの不足している参照は 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'
于 2016-03-02T12:08:24.983 に答える