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

Ubuntu14.04下Ninja构建报错:缺失GLIBCXX_3.4.20/3.4.21版本

解决Ubuntu 14.04下构建项目时libstdc++.so.6版本缺失问题

我在Ubuntu 14.04.5 LTS上尝试执行以下GN和Ninja构建命令:

gn gen PathToBinary --args='is_debug=false symbol_level=0 proprietary_codecs=true ffmpeg_branding="Chrome" use_cfi_diag=true enable_nacl=false treat_warnings_as_errors = true'
ninja -C PathToBinary path

执行后遇到了protoc依赖的libstdc++版本不足的错误:

[1/10551] ACTION //cc/proto:proto_internal_gen(//build/toolchain/linux:clang_x64)
FAILED: pyproto/cc/proto/memory_allocation_pb2.py gen/cc/proto/memory_allocation.pb.cc gen/cc/proto/memory_allocation.pb.h
python ../../tools/protoc_wrapper/protoc_wrapper.py --include cc/proto/cc_proto_export.h --protobuf gen/cc/proto/memory_allocation.pb.h --proto-in-dir ../../cc/proto --proto-in-file memory_allocation.proto --use-system-protobuf=0 -- ./protoc --cpp_out dllexport_decl=CC_PROTO_EXPORT:gen/cc/proto --python_out pyproto/cc/proto
./protoc: /usr/lib/x86_64-linux-gnu/libstdc++.so.6: version `GLIBCXX_3.4.21' not found (required by ./protoc)
./protoc: /usr/lib/x86_64-linux-gnu/libstdc++.so.6: version `GLIBCXX_3.4.20' not found (required by ./protoc)

问题原因

Ubuntu 14.04默认搭载的libstdc++6版本比较旧,不支持protoc需要的GLIBCXX_3.4.20和GLIBCXX_3.4.21版本,导致protoc无法正常运行。

解决方案

方案一:手动更新系统的libstdc++库

  1. 先检查当前系统支持的GLIBCXX版本,确认确实缺失目标版本:
    strings /usr/lib/x86_64-linux-gnu/libstdc++.so.6 | grep GLIBCXX
    
  2. 下载Ubuntu 16.04版本的libstdc++6包(该版本包含所需的GLIBCXX版本):
    wget http://security.ubuntu.com/ubuntu/pool/main/g/gcc-5/libstdc++6_5.4.0-6ubuntu1~16.04.12_amd64.deb
    
  3. 解压deb包到临时目录:
    dpkg-deb -x libstdc++6_5.4.0-6ubuntu1~16.04.12_amd64.deb temp_dir
    
  4. 备份原库文件并替换为新版本:
    sudo cp /usr/lib/x86_64-linux-gnu/libstdc++.so.6 /usr/lib/x86_64-linux-gnu/libstdc++.so.6.backup
    sudo cp temp_dir/usr/lib/x86_64-linux-gnu/libstdc++.so.6.0.21 /usr/lib/x86_64-linux-gnu/
    sudo ln -sf /usr/lib/x86_64-linux-gnu/libstdc++.so.6.0.21 /usr/lib/x86_64-linux-gnu/libstdc++.so.6
    
  5. 验证更新结果,再次执行第一步的命令,应该能看到GLIBCXX_3.4.20和GLIBCXX_3.4.21出现在列表中。

方案二:使用clang的libc替代系统libstdc

如果不想修改系统库,可以在GN的构建参数中添加use_libcxx=true,让构建过程使用clang自带的libc库,绕过系统旧版本libstdc的限制:

gn gen PathToBinary --args='is_debug=false symbol_level=0 proprietary_codecs=true ffmpeg_branding="Chrome" use_cfi_diag=true enable_nacl=false treat_warnings_as_errors=true use_libcxx=true'

之后再执行ninja -C PathToBinary path即可。

方案三:升级操作系统(谨慎选择)

如果项目允许,可以把系统升级到Ubuntu 16.04或更高版本,这些版本默认搭载的libstdc++版本原生支持GLIBCXX_3.4.20和GLIBCXX_3.4.21,从根本上解决版本问题。不过升级系统可能会影响其他依赖的软件,需要提前做好备份和兼容性测试。

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.05.28 07:26:12