Статическое связывание ffmpeg-sys в Amazon Linux завершается с неопределенными ссылками - PullRequest
0 голосов
/ 15 сентября 2018

Мой проект зависит от ffmpeg-sys ящика, который настроен для статической сборки следующим образом:

[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 |= note: "cc" "-Wl, - по мере необходимости" "-Wl, -z, noexecstack" "-m64" "-L"

[... исключено для ясности ...]

В функции 'sample :: main :: hbbb19855251826d6': /home/ec2-user/sample/src/main.rs:6: неопределенная ссылка на 'av_register_all' collect2: ошибка: 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-пользователь / sample / target / debug / deps -C incremental = / home / ec2-user /sample / target / debug / incremental -L зависимость = / home / ec2-пользователь / sample / target / debug / deps --extern ffmpeg_sys = / home / ec2-user / sample / target / debug / deps / libffmpeg_sys-fa3ff87f80f2d27e.rlib-L родной = / home / ec2-пользователь / пример / цель / отладка / сборка / ffmpeg-sys-0b3c813f29a9a20e / out / dist / lib '(код выхода: 1)

libffmpeg_sys-fa3ff87f80f2d27e.rlib равен 207M, и поэтому я предполагаю, что содержит всестатически скомпилированный код ffmpeg.

Это происходит только тогда, когда я использую экземпляр Amazon Linux.Компиляция на моем обычном рабочем столе Fedora 28 приводит к работающему двоичному файлу.

Как мне выяснить причину этой ошибки?

1 Ответ

0 голосов
/ 15 сентября 2018

Я решил эту проблему, построив llvm 6.0.1, а затем перестроив его, установив LIBCLANG_PATH для указания на более новую версию.

Может показаться, что rustc имеет минимальное требование к версии для libclang.so, но я не смог найти официальный источник, документирующий это. Версия, установленная на amazon-linux, - это 3.6.2, что явно устарело.

...