Какие изменения нужно внести в make-файл, чтобы включить protobuf

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

И я создал nrtprofile.pb.cc и nrtprofile.pb.h с помощью команды protoc.

Какие изменения необходимо внести в make-файл, потому что я получаю следующую ошибку в классе 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.

Я добавил -lprotobuf в LDFLAGS. Тем не менее, он не распознает классы в nrtproto.pb.cc. Где мне включить в make-файл?

NITIKA KHATKAR 10.08.2018 14:55

Каждый файл .cc или .cpp должен быть отдельно скомпилирован в файл .o и в конце скомпилирован в двоичный файл redisConnection.

Botje 10.08.2018 15:30

Это сработало. Большое спасибо!!!!!

NITIKA KHATKAR 12.08.2018 06:51
0
4
831
2

Ответы 2

Добавьте -lprotobuf в переменную LDFLAGS.

Однако это предполагает, что библиотека protobuf установлена ​​в том месте, где ее находит компоновщик (например, / usr / lib). Если он у вас есть где-то еще, вы можете указать дополнительный путь поиска, установив переменную LD_LIBRARY_PATH следующим образом: export LD_LIBRARY_PATH=/my/special/path.

Спасибо!. Это устранило ошибку ParseFromString. Но по-прежнему возникают ошибки, такие как неопределенная ссылка на `nrtprofile :: RedisNewsMessage :: RedisNewsMessage () '.

NITIKA KHATKAR 10.08.2018 14:43

Я думаю, мне также нужно включить nrtproto.pb.cc где-нибудь в makefile

NITIKA KHATKAR 10.08.2018 14:44

Вы можете найти необходимые флаги компоновщика и компилятора здесь. В основном, связанные с компилятором и компоновщиком, вам нужно сделать что-то вроде c++ my_program.cc my_proto.pb.cc `pkg-config --cflags --libs protobuf

Другие вопросы по теме