首页 文章

在Amazon Linux上静态链接ffmpeg-sys失败,未定义引用

提问于
浏览
4

我的项目取决于配置为静态构建的 ffmpeg-sys crate,如下所示:

[dependencies.ffmpeg-sys]
version = "3.4.1"
default-features = false
features = ["avcodec", "avformat", "swresample", "build", "static"]

我的项目包含一个简单的文件:

extern crate ffmpeg_sys;

use ffmpeg_sys::av_register_all;

fn main() {
    unsafe { av_register_all() };
    println!("Hello, world!");
}

使用 cargo build 进行编译时出现以下错误:

编译样本v0.1.0(文件:/// home / ec2-user / sample)错误:与'cc'链接失败:退出代码:1 | =注意:“cc”“ - WI, - as-needed”“-Wl,-z,noexecstack”“ - m64”“ - L”[...为了清楚起见...]在函数'sample :: main :: hbbb19855251826d6':/ home / ec2-user / sample / src / main.rs:6:未定义引用'av_register_all'colle2:错误:ld返回1退出状态

所需的静态库 libavformat.a 和朋友可以在 target/build/debug 文件夹中找到,表明 ffmpeg-sys 已成功编译了库 .

这是失败的 rustc 命令:

引起:进程未成功退出:'rustc --crate-name示例src / main.rs --crate-type bin --emit = dep-info,link -C debuginfo = 2 -C metadata = 250bf40eb277d05a - C extra-filename = -250bf40eb277d05a --out-dir / home / ec2-user / sample / target / debug / deps -C incremental = / home / ec2-user / sample / target / debug / incremental -L dependency = / home / ec2-user / sample / target / debug / deps --extern ffmpeg_sys = / home / ec2-user / sample / target / debug / deps / libffmpeg_sys-fa3ff87f80f2d27e.rlib -L native = / home / ec2-user / sample / target / debug / build / ffmpeg-sys-0b3c813f29a9a20e / out / dist / lib'(退出代码:1)

libffmpeg_sys-fa3ff87f80f2d27e.rlib 是207M,因此我假设包含所有静态编译的ffmpeg代码 .

这只有在我构建Amazon Linux实例时才会发生 . 在我的常规Fedora 28桌面上进行编译会产生一个有效的二进制文件 .

我该如何找出导致此错误的根本原因?

1 回答

  • 0

    我通过构建 llvm 6.0.1解决了这个问题,然后使用 LIBCLANG_PATH 重建设置为指向较新的版本 .

    似乎 rustclibclang.so 上有最低版本要求,但我找不到记录该文件的官方来源 . amazon-linux 上安装的版本是3.6.2,显然太旧了 .

相关问题