在makefile中要进行哪些更改以包含protobuf

时间:2018-08-10 12:25:15

标签: c++ makefile protocol-buffers

Makefile:

CFLAGS = -c -g -W -O3 -Wall -Werror -Wshadow \
-Wno-long-long -Wpointer-arith -D_REENTRANT \
-D_POSIX_PTHREAD_SEMANTICS -DLINUX2 \
-I ./acl/lib_acl_cpp/include
BASE_PATH=./acl
LDFLAGS = -L$(BASE_PATH)/lib_acl_cpp/lib -l_acl_cpp \
-L$(BASE_PATH)/lib_protocol/lib -l_protocol \
-L$(BASE_PATH)/lib_acl/lib -l_acl \
-lpthread
redisConnection: redisConnection.o
    g++ -o $@ $^ $(LDFLAGS)
redisConnection.o: redisConnection.cpp
    g++ $(CFLAGS) redisConnection.cpp -o redisConnection.o

我已经在protoc命令的帮助下生成了nrtprofile.pb.cc和nrtprofile.pb.h。

必须对makefile进行哪些更改,因为使用函数时我在类redisConnection.cpp中遇到以下错误:

undefined reference to `google::protobuf::MessageLite::ParseFromString(std::__cxx11::basic_string<char, std::char_traits<char>, std::allocator<char> > const&)'

我已将nrtprofile.pb.h包含在redisConnection.cpp中

由于这里有两件事redisConnection和redisConnection.o,我很困惑应该在哪里编写nrtprofile.pb.cc。

2 个答案:

答案 0 :(得分:0)

-lprotobuf添加到LDFLAGS变量中。

但是,这假定protobuf库安装在链接器找到它的位置(例如/ usr / lib)。如果您在其他地方使用它,则可以通过设置LD_LIBRARY_PATH变量来提供其他搜索路径,如下所示:export LD_LIBRARY_PATH=/my/special/path

答案 1 :(得分:0)

您可以找到所需的链接器和编译器标志here。基本上,与编译器和链接器相关,您需要执行类似c++ my_program.cc my_proto.pb.cc `pkg-config --cflags --libs protobuf

的操作