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。
答案 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