c++ - Apache thrift 未定义对 apache::thrift::server::TNonblockingServer 的引用

标签 c++ rpc thrift

我正在尝试编译一段创建 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

最佳答案

正如 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'

关于c++ - Apache thrift 未定义对 apache::thrift::server::TNonblockingServer 的引用,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/15288395/

相关文章:

c++ - 编写 C++ Dll 并将其高效地公开给 .NET(不通过 C++/CLI)

c++ - 如何知道返回地址在栈上的位置c/c++

php - 在网络服务器中运行的后台服务如何通知客户端浏览器服务的进度?

web-services - 我应该通过 HTTP RESTify 我的 RPC 调用吗?

amazon-ec2 - thrfit 服务上 ec2 实例的 vpc 中的内部负载平衡

c++ - 从文件中获取输入问题 C++

python - 用于 Python 的 RPC 库

c++ - Thrift 或 Protocol buffer 作为跨语言序列化解决方案?

go - 如何在 Go 中解码 Apache Thrift 负载?

c++ - Linux 系统调用 aio_write() 失败,错误代码为 22 (EINVAL)