当前位置: 首页 > 知识库问答 >
问题:

即使在看似链接protobuf库之后也会出现protobuf链接错误(C)

穆歌者
2023-03-14

我正在做一个项目,我在其中使用协议buf。我安装了3.1.0版。

我写了一个程序来测试Prorobuf中的序列化,看起来像这样

// This file exists to facilitate testing

//MIST.cpp

//#include <asio.hpp>
#include <Task.hpp> //user defined, not relevant
#include <MIST.hpp> //user defined, not relevant
#include <ReceiveData.hpp> //user defined, not relevant
#include <MIST.pb.h> //protobuf file made from protoc

int main() {
    /*MIST::ReceiveData receiveObj;
    std::string s = receiveObj.receive<64>();
    std::cout << "Message received: '" << s << "'" << std::endl;*/

    ProtobufMIST::Task taskObj;
    taskObj.set_task_name("The Best Task");
    taskObj.set_task_id("7");

    std::string* message;
    if(!taskObj.SerializeToString(message))
        std::cout << "Task '" << taskObj.task_name() << "'" << " not serialized successfully\n";
    else
        std::cout << message << std::endl;

    return 0;
}

我用构建脚本编译了它。下面的命令是lpthread MIST。cpp-lprotobuf-o a.o

此命令成功退出。

然后,我尝试用命令链接a.o,得到以下错误

a.o: In function `main':
MIST.cpp:(.text+0x20): undefined reference to `ProtobufMIST::Task::Task()'
MIST.cpp:(.text+0x55): undefined reference to `google::protobuf::MessageLite::SerializeToString(std::string*) const'
MIST.cpp:(.text+0xd0): undefined reference to `ProtobufMIST::Task::~Task()'
MIST.cpp:(.text+0xf2): undefined reference to `ProtobufMIST::Task::~Task()'
a.o: In function `google::protobuf::internal::GetEmptyStringAlreadyInited()':

MIST.cpp:(.text._ZN6google8protobuf8internal27GetEmptyStringAlreadyInitedEv[_ZN6google8protobuf8internal27GetEmptyStringAlreadyInitedEv]+0x5): undefined reference to `google::protobuf::internal::fixed_address_empty_string'
collect2: error: ld returned 1 exit status

我不确定如何可以有未定义的引用来包含我已经编译过的文件,或者当我同时包含-L/usr/local/lib和-lara buf时,如何可以有未定义的引用来包含我已经编译过的文件。我对如何解决问题感到困惑。

作为参考我试图实施这些解决方案很少成功

链接协议库的问题

将protobuf库与代码链接(Google协议缓冲区)

无法从google协议缓冲区编译示例

在虚拟机上运行Kubuntu 16.10。主机为Windows 10。

共有1个答案

岳玉堂
2023-03-14

编译。pb。将文件抄送到。o文件并将其与主程序链接,这应该可以解决问题。

 类似资料:
  • 我正在尝试运行Tensorflow的简单语音识别网络示例: 但是我一直得到: 回溯(最近一次调用):文件“C:\Users\DELL 7000\AppData\Local\Programs\Python\Python37-32\lib\site packages\tensorflow\Python\pywrap\u tensorflow.py”,第18行,swig\u import\u helpe

  • 我尝试使用c1z特性来使用std::experimental::filesystem 在用g添加-lstdc-fs标志之后,我可以看到我能够将std::experimental::filesystem::v1::__cxx11::path::_M_split_cmpts()与我的程序链接起来。 i、 e我不会再犯这个错误了 sdc.cpp:(.文本 0x7e5): 未定义对“标准:实验::文件系统

  • 问题内容: 这是我要构建的工作流程 使用脚本编译我的原型文件,将生成的src放在指定目录中 链接到Eclipse中生成的类 编译我的项目 我可以很容易地使用Eclipse CDT针对C ++做到这一点:在我的项目中,选择File-> New-> Other,然后在General下选择File。然后,我单击“高级”,然后选择指向系统文件的链接。 不过,我还没有发现如何针对Java执行此操作。一旦回答

  • 我正在尝试为协议缓冲区构建Java运行时库。我在Windows和OS X上都犯了错误,因为我遵循了Protocol Buffers项目(从中克隆而来)中Java目录下的自述指令https://github.com/google/protobuf). 当我在protobuf/java目录下运行

  • 我试图生成excel文件,我的数据是超文本标记语言字符串的形式。html字符串中有超链接(锚标签)。列1有一个超链接和之后的一些文本。然而,当在Excel中查看时,它使该单元格中的所有文本都成为超链接。有可能限制吗?在浏览器中打开下面的文件,它工作正常。当在excel中打开时,它会超链接该单元格中的所有内容。

  • 我正在尝试将OpenGL与Qt一起使用。我正在遵循这个示例:http://qt-project.org/doc/qt-5.0/qtgui/openglwindow.html使用Qt 5 build for msvc2012。最后我得到了以下错误: 错误LNK2019:未解析的外部符号_imp_glClear@4在函数“public:virtual void _uthiscall OpenGLWin