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

使用预编译librav1e出现libc.so加载及链接错误的技术求助

解决方法

1. 问题根源

预编译的librav1e是在更高版本glibc的系统(如Ubuntu 20.04及以上)编译的,这类系统的libc.so可能是实际共享库,或者编译时的链接配置导致它直接依赖libc.so而非标准的libc.so.6。而Ubuntu 18.04的libc.so是ld脚本,链接器无法直接用它解析符号;再加上fstat64/stat64这类函数在旧glibc中的符号定义与新系统存在差异,最终触发错误。

2. 临时修复:添加链接器参数

编译依赖librav1e的代码时,给链接器添加以下参数,强制它使用正确的libc库:

# 在编译命令中注入这些LDFLAGS
export LDFLAGS="-Wl,-rpath-link=/lib/aarch64-linux-gnu -Wl,--undefined-version"
# 之后正常执行你的编译命令,比如:
# make

参数说明:

  • -rpath-link=/lib/aarch64-linux-gnu:告诉链接器到指定目录查找libc.so.6,替代找不到的libc.so
  • --undefined-version:忽略版本符号不匹配的问题,规避高版本glibc编译的库带来的版本符号差异

3. 彻底解决:从源码编译librav1e

预编译包的兼容性问题很难彻底规避,直接在Ubuntu 18.04 aarch64环境下编译librav1e是最稳妥的方案:

# 安装编译依赖
sudo apt update && sudo apt install cargo build-essential git

# 克隆源码并切换到v0.6.6版本
git clone https://github.com/xiph/rav1e.git
cd rav1e
git checkout v0.6.6

# 编译release版本
cargo build --release

# 安装库文件和头文件
sudo cp target/release/librav1e.so* /usr/local/lib/
sudo cp target/release/librav1e.a /usr/local/lib/
sudo cp -r include/rav1e /usr/local/include/

# 生成并安装pkgconfig配置文件(供依赖库自动查找)
sudo mkdir -p /usr/local/lib/pkgconfig/
cat > /usr/local/lib/pkgconfig/rav1e.pc <<EOF
prefix=/usr/local
exec_prefix=\${prefix}
libdir=\${exec_prefix}/lib
includedir=\${prefix}/include

Name: rav1e
Description: AV1 encoder library
Version: 0.6.6
Libs: -L\${libdir} -lrav1e
Cflags: -I\${includedir}
EOF

4. 关于libc依赖的疑问

这种依赖libc.so的情况不正常,标准Linux共享库应该依赖libc.so.6(动态库的SONAME)。预编译包出现这个问题是编译环境的链接配置导致的,属于兼容性bug。


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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.07.16 05:24:55