运行 protobuf 在 eclipse 上给出的例子 (C++)
Run protobuf given example on eclipse (C++)
我正在尝试使用和理解协议缓冲区。我已经安装了库并尝试了 运行 这个例子。但是我看不出哪里错了。
下面我描述所有的步骤:
1.按照说明安装protobuf编译器https://github.com/protocolbuffers/protobuf/tree/master/src
2.按照说明安装protobuf插件到eclipsehttps://github.com/google/protobuf-dt
(不确定是否需要)。
3. 打开protobuf/examples/目录。 运行 add_person.cc 在日食中
编译器产生以下错误。我看到这是一个链接错误。但我不确定哪里出错了。
make all
Building file: ../src/add_person.cc
Invoking: GCC C++ Compiler
g++ -std=c++11 -I/home/rohan/Downloads/Utilities/protobuf/examples -O0 -g3 -Wall -c -fmessage-length=0 -pthread -MMD -MP -MF"src/add_person.d" -o "src/add_person.o" "../src/add_person.cc"
Finished building: ../src/add_person.cc
Building target: add_person
Invoking: GCC C++ Linker
g++ -L/usr/lib64 -pthread -o "add_person" ./src/add_person.o -lprotobuf
/usr/lib64/gcc/x86_64-suse-linux/7/../../../../x86_64-suse-linux/bin/ld: ./src/add_person.o: in function `main':
/home/rohan/eclipse-workspace/add_person/Debug/../src/add_person.cc:81: undefined reference to `tutorial::AddressBook::AddressBook()'
/usr/lib64/gcc/x86_64-suse-linux/7/../../../../x86_64-suse-linux/bin/ld: /home/rohan/eclipse-workspace/add_person/Debug/../src/add_person.cc:81: undefined reference to `tutorial::AddressBook::~AddressBook()'
/usr/lib64/gcc/x86_64-suse-linux/7/../../../../x86_64-suse-linux/bin/ld: /home/rohan/eclipse-workspace/add_person/Debug/../src/add_person.cc:81: undefined reference to `tutorial::AddressBook::~AddressBook()'
/usr/lib64/gcc/x86_64-suse-linux/7/../../../../x86_64-suse-linux/bin/ld: ./src/add_person.o: in function `google::protobuf::internal::GenericTypeHandler<tutorial::Person_PhoneNumber>::New(google::protobuf::Arena*)':
/usr/local/include/google/protobuf/repeated_field.h:656: undefined reference to `tutorial::Person_PhoneNumber* google::protobuf::Arena::CreateMaybeMessage<tutorial::Person_PhoneNumber>(google::protobuf::Arena*)'
/usr/lib64/gcc/x86_64-suse-linux/7/../../../../x86_64-suse-linux/bin/ld: ./src/add_person.o: in function `google::protobuf::internal::GenericTypeHandler<tutorial::Person>::New(google::protobuf::Arena*)':
/usr/local/include/google/protobuf/repeated_field.h:656: undefined reference to `tutorial::Person* google::protobuf::Arena::CreateMaybeMessage<tutorial::Person>(google::protobuf::Arena*)'
collect2: error: ld returned 1 exit status
make: *** [makefile:47: add_person] Error 1
"make all" terminated with exit code 2. Build might be incomplete.
请注意:这可能无法解决其他人的问题。
我在eclipse中运行的例子程序在项目中只有add_person.cc
个文件。包含 protocolbuffer 类 和定义 (addressbook.pb.h
& addressbook.pb.cc
) 的文件不在项目中。相反,我将它们添加为 -I\path\to\the\directory\
,这会产生该错误。
对于这个最小的问题,我只需要 移动/复制 项目中的 addressbook.pb.h
& addressbook.pb.cc
文件。
我正在尝试使用和理解协议缓冲区。我已经安装了库并尝试了 运行 这个例子。但是我看不出哪里错了。
下面我描述所有的步骤: 1.按照说明安装protobuf编译器https://github.com/protocolbuffers/protobuf/tree/master/src
2.按照说明安装protobuf插件到eclipsehttps://github.com/google/protobuf-dt (不确定是否需要)。
3. 打开protobuf/examples/目录。 运行 add_person.cc 在日食中 编译器产生以下错误。我看到这是一个链接错误。但我不确定哪里出错了。
make all
Building file: ../src/add_person.cc
Invoking: GCC C++ Compiler
g++ -std=c++11 -I/home/rohan/Downloads/Utilities/protobuf/examples -O0 -g3 -Wall -c -fmessage-length=0 -pthread -MMD -MP -MF"src/add_person.d" -o "src/add_person.o" "../src/add_person.cc"
Finished building: ../src/add_person.cc
Building target: add_person
Invoking: GCC C++ Linker
g++ -L/usr/lib64 -pthread -o "add_person" ./src/add_person.o -lprotobuf
/usr/lib64/gcc/x86_64-suse-linux/7/../../../../x86_64-suse-linux/bin/ld: ./src/add_person.o: in function `main':
/home/rohan/eclipse-workspace/add_person/Debug/../src/add_person.cc:81: undefined reference to `tutorial::AddressBook::AddressBook()'
/usr/lib64/gcc/x86_64-suse-linux/7/../../../../x86_64-suse-linux/bin/ld: /home/rohan/eclipse-workspace/add_person/Debug/../src/add_person.cc:81: undefined reference to `tutorial::AddressBook::~AddressBook()'
/usr/lib64/gcc/x86_64-suse-linux/7/../../../../x86_64-suse-linux/bin/ld: /home/rohan/eclipse-workspace/add_person/Debug/../src/add_person.cc:81: undefined reference to `tutorial::AddressBook::~AddressBook()'
/usr/lib64/gcc/x86_64-suse-linux/7/../../../../x86_64-suse-linux/bin/ld: ./src/add_person.o: in function `google::protobuf::internal::GenericTypeHandler<tutorial::Person_PhoneNumber>::New(google::protobuf::Arena*)':
/usr/local/include/google/protobuf/repeated_field.h:656: undefined reference to `tutorial::Person_PhoneNumber* google::protobuf::Arena::CreateMaybeMessage<tutorial::Person_PhoneNumber>(google::protobuf::Arena*)'
/usr/lib64/gcc/x86_64-suse-linux/7/../../../../x86_64-suse-linux/bin/ld: ./src/add_person.o: in function `google::protobuf::internal::GenericTypeHandler<tutorial::Person>::New(google::protobuf::Arena*)':
/usr/local/include/google/protobuf/repeated_field.h:656: undefined reference to `tutorial::Person* google::protobuf::Arena::CreateMaybeMessage<tutorial::Person>(google::protobuf::Arena*)'
collect2: error: ld returned 1 exit status
make: *** [makefile:47: add_person] Error 1
"make all" terminated with exit code 2. Build might be incomplete.
请注意:这可能无法解决其他人的问题。
我在eclipse中运行的例子程序在项目中只有add_person.cc
个文件。包含 protocolbuffer 类 和定义 (addressbook.pb.h
& addressbook.pb.cc
) 的文件不在项目中。相反,我将它们添加为 -I\path\to\the\directory\
,这会产生该错误。
对于这个最小的问题,我只需要 移动/复制 项目中的 addressbook.pb.h
& addressbook.pb.cc
文件。