我试图编译一段创建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/
这是我的makefile
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发布于 2016-03-02 20:08:25
正如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'https://stackoverflow.com/questions/15288395
复制相似问题