C++,协议缓冲区,ld:未找到体系结构arm64的符号

46qrfjad  于 2023-02-20  发布在  其他
关注(0)|答案(1)|浏览(138)

我下载了protobuf-21.2并执行以下指令来安装protobuf:

./autogen.sh && ./configure && make && make check && sudo make install

我用下面的例子来练习:
test.proto:

syntax = "proto3";
message Test {
        optional string name =1;
        optional int32 age = 2;
}

test.cpp:

#include<iostream>
#include "test.pb.h"
using namespace std;
int main()
{
    Test pro_t;
    pro_t.set_age(3);
    cout<<pro_t.age();
    return 0;
}

运行命令编译proto文件:

protoc -I=./ --cpp_out=./ ./test.proto

运行命令来编译cpp文件:

g++ -o test test.cpp test.pb.cc -lprotobuf -I /usr/local/include/google/protobuf/ -L /usr/local/lib -std=c++11

但是当我做cpp的时候,我遇到了一个问题:

Undefined symbols for architecture arm64:
  "google::protobuf::internal::InternalMetadata::~InternalMetadata()", referenced from:
      google::protobuf::MessageLite::~MessageLite() in test-0f87f5.o
ld: symbol(s) not found for architecture arm64
clang: error: linker command failed with exit code 1 (use -v to see invocation)

我不知道我做错了什么。

atmip9wb

atmip9wb1#

将构建类型从调试更改为发布解决了我的问题。

相关问题