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-файл?
Каждый файл .cc
или .cpp
должен быть отдельно скомпилирован в файл .o
и в конце скомпилирован в двоичный файл redisConnection
.
Это сработало. Большое спасибо!!!!!
Добавьте -lprotobuf
в переменную LDFLAGS
.
Однако это предполагает, что библиотека protobuf установлена в том месте, где ее находит компоновщик (например, / usr / lib). Если он у вас есть где-то еще, вы можете указать дополнительный путь поиска, установив переменную LD_LIBRARY_PATH
следующим образом: export LD_LIBRARY_PATH=/my/special/path
.
Спасибо!. Это устранило ошибку ParseFromString. Но по-прежнему возникают ошибки, такие как неопределенная ссылка на `nrtprofile :: RedisNewsMessage :: RedisNewsMessage () '.
Я думаю, мне также нужно включить nrtproto.pb.cc где-нибудь в makefile
Вы можете найти необходимые флаги компоновщика и компилятора здесь. В основном, связанные с компилятором и компоновщиком, вам нужно сделать что-то вроде c++ my_program.cc my_proto.pb.cc `pkg-config --cflags --libs protobuf
Возможный дубликат Что такое ошибка неопределенной ссылки / неразрешенного внешнего символа и как ее исправить?