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

Solaris 11下protoc执行报错:缺失GLIBCXX_3.4.20版本的libstdc++.so.6

解决Solaris 11中protoc依赖GLIBCXX_3.4.20缺失的问题

你的核心问题是系统默认的libstdc++.so.6版本过低,没法满足protoc和libprotobuf.so.15对GLIBCXX_3.4.20的依赖需求。Solaris 11自带的gcc/libstdc++通常版本偏老(比如gcc 4.7及以下),而GLIBCXX_3.4.20是gcc 4.8及以上版本才引入的特性。下面是具体的解决步骤:

1. 安装高版本gcc(推荐方案)

Solaris 11的pkg包管理器提供了较新的gcc版本,直接通过包管理安装最省心:

# 这里以安装gcc 7为例,也可以选择更高版本如gcc-9
pkg install gcc-7

安装完成后,验证新gcc的libstdc++是否包含所需版本:

# x86架构执行这条
strings /usr/gcc/7/lib/amd64/libstdc++.so.6 | grep GLIBCXX_3.4.20
# SPARC架构则用这条
strings /usr/gcc/7/lib/sparcv9/libstdc++.so.6 | grep GLIBCXX_3.4.20

正常情况下会输出GLIBCXX_3.4.20的条目,说明库版本符合要求。

2. 让protoc调用新的libstdc++运行

有两种方式可以让protoc找到正确的依赖库:

方式一:临时设置环境变量

在执行protoc命令前,先指定新libstdc++的路径:

# x86架构
export LD_LIBRARY_PATH=/usr/gcc/7/lib/amd64:$LD_LIBRARY_PATH
# SPARC架构
export LD_LIBRARY_PATH=/usr/gcc/7/lib/sparcv9:$LD_LIBRARY_PATH

# 接着执行你的protoc命令即可
protoc -I=$SRC_DIR --cpp_out=$DST_DIR $SRC_DIR/addressbook.proto

方式二:重新编译protobuf(更彻底)

如果之前你是用系统默认gcc编译的protobuf,建议用新安装的gcc重新编译一次,这样生成的protoc会默认绑定新的libstdc++:

# 进入protobuf源码目录,先清理之前的编译残留
make clean && rm -rf config.log config.status

# 指定用新的gcc/g++进行编译配置
./configure CC=gcc-7 CXX=g++-7
make && make install

重新编译完成后,protoc会自动关联新的libstdc++,无需每次手动设置环境变量。

3. 永久配置环境变量(可选)

如果不想每次启动shell都手动设置LD_LIBRARY_PATH,可以把路径添加到用户的shell配置文件中:

# 编辑~/.bashrc(如果用的是bash)或者~/.profile
echo 'export LD_LIBRARY_PATH=/usr/gcc/7/lib/amd64:$LD_LIBRARY_PATH' >> ~/.bashrc
# 让配置立即生效
source ~/.bashrc

注意:如果是SPARC架构,记得把路径中的amd64替换为sparcv9。

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.05.15 06:35:55