You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

安装Protobuf 21.2后编译C++示例出现arm64架构符号缺失错误

解决Protobuf编译链接时Undefined symbols for architecture arm64错误

可能的原因及修复方案

1. Protobuf编译架构不匹配

你用默认./configure编译的Protobuf库可能不是arm64架构,和当前系统(比如M系列Mac)的架构冲突,导致链接时找不到对应符号。

重新编译安装Protobuf,指定arm64架构:

./autogen.sh
# 针对M系列Mac使用此配置,其他arm64系统可调整--host参数
./configure --host=aarch64-apple-darwin
make clean && make && make check && sudo make install

2. 链接库顺序错误

GCC/G++链接时,依赖库必须放在被依赖的源文件之后。你当前命令把-lprotobuf放在了源文件前面,调整顺序即可:

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

(简化-I路径为/usr/local/include,编译器会自动找到google/protobuf下的头文件)

3. 系统自带Protobuf版本冲突

部分系统预装了旧版Protobuf,可能导致链接时调用系统库而非你安装的21.2版本。先指定优先使用手动安装的库:

# macOS
export DYLD_LIBRARY_PATH=/usr/local/lib:$DYLD_LIBRARY_PATH
# Linux
export LD_LIBRARY_PATH=/usr/local/lib:$LD_LIBRARY_PATH

之后再执行编译命令。

4. 验证库架构是否正确

先确认安装的Protobuf库是arm64架构:

# macOS
lipo -info /usr/local/lib/libprotobuf.dylib
# Linux
file /usr/local/lib/libprotobuf.so

如果输出不含arm64或aarch64,说明库架构错误,必须重新编译。

验证流程

  1. 重新生成proto对应的C++文件:
protoc -I=./ --cpp_out=./ ./test.proto
  1. 用调整后的命令编译程序:
g++ -o test test.cpp test.pb.cc -I /usr/local/include -L /usr/local/lib -std=c++11 -lprotobuf

内容的提问来源于stack exchange,提问作者Maik Fang

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.08.25 23:09:32