在日食(C++)上运行protobuf给出的示例
Run protobuf given example on eclipse (C++)
我正在尝试使用和理解协议缓冲区。我已经安装了该库并尝试运行该示例。但我看不出我哪里出了问题。
下面我将描述所有步骤:1. 按照说明安装 protobuf 编译器 https://github.com/protocolbuffers/protobuf/tree/master/src
2. 按照说明安装 protobuf 插件以日食 https://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
)的文件不在项目中。相反,我将它们添加为产生该错误的-Ipathtothedirectory
。
对于这个min问题,我只需要在项目内移动/复制addressbook.pb.h
和addressbook.pb.cc
文件。
相关文章:
- 运行同一解决方案的另一个项目的项目
- CMake-按正确顺序将项目与C运行时对象文件链接
- 如何运行位于boost/libs/python/example/tutorial目录中的hello.cpp和Jamfil
- 代码在main()中运行,但在函数中出现错误
- 我在c++代码中生成了一个运行时#3异常
- 如何在linux终端中同时编译和运行c++代码
- 为什么在运行时没有向我们提供有关分段错误的更多信息?
- 如何在运行中期切换GTK CSS style_context
- 如何在MS Visual Studio 2019中运行QT UI
- 如何通过cpp程序运行shell脚本
- IPC使用多个管道和分支进程来运行Python程序
- 删除指向指针的指针是运行时错误吗
- 如何用参数值调用函数(仅在运行时已知)
- 为什么即使使用-cudart-static进行编译,库用户仍然需要链接到cuda运行时
- 是否可以在编译时初始化数组,以便在运行时不会花费时间?
- c++中的指针和运行时错误
- 在C应用程序中运行C++(带有STL)函数
- 运行程序时出现问题
- QT错误:运行代码后,在QT中获得Protobuf错误
- 在日食(C++)上运行protobuf给出的示例