首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >来自ubuntu的ffmpeg静态库和我编译的我的静态库之间有什么区别?

来自ubuntu的ffmpeg静态库和我编译的我的静态库之间有什么区别?
EN

Ask Ubuntu用户
提问于 2019-08-30 02:04:45
回答 1查看 1.9K关注 0票数 2

我从ubuntu存储库尝试了ffmpeg,链接它们就像做-lavcodec -lavuitl ...一样简单。然后,我使用以下配置编译了我的配置:

代码语言:javascript
复制
    ./configure \
    --prefix=${BUILD_DIR}/desktop/x86_64 \
    --extra-cflags="-I$HOME/ffmpeg_build/include" \
    --extra-ldflags="-L$HOME/ffmpeg_build/lib" \
    --enable-shared \
    --arch=x86_64 \
    --enable-vaapi \
    --disable-vaapi \
    --enable-opencl \
    --disable-debug \
    --enable-nvenc \
    --enable-cuda \
    --enable-cuvid \
    --enable-libvpx \
    --enable-libdrm \
    --enable-gpl \
    --enable-runtime-cpudetect \
    --enable-libfdk-aac \
    --enable-libx264 \
    --enable-openssl \
    --enable-pic \
    --extra-libs="-lpthread -lm -lz -ldl" \
    --enable-nonfree 

它生成静态库,就像由ubuntu存储库提供的库一样。但是,我不能简单地将它们与-lavcodec -lavuitl ...链接,因为我获得了许多未定义的引用,如

代码语言:javascript
复制
../../../deps/ffmpeg/build/desktop/x86_64/lib/libavcodec.a(libfdk-aacdec.o): In function `fdk_aac_decode_frame':
libfdk-aacdec.c:(.text+0x4f): undefined reference to `aacDecoder_Fill'
libfdk-aacdec.c:(.text+0x6d): undefined reference to `aacDecoder_DecodeFrame'
libfdk-aacdec.c:(.text+0x8d): undefined reference to `aacDecoder_GetStreamInfo'
../../../deps/ffmpeg/build/desktop/x86_64/lib/libavcodec.a(libfdk-aacdec.o): In function `fdk_aac_decode_close':
libfdk-aacdec.c:(.text.unlikely+0xf): undefined reference to `aacDecoder_Close'
../../../deps/ffmpeg/build/desktop/x86_64/lib/libavcodec.a(libfdk-aacdec.o): In function `fdk_aac_decode_init':
libfdk-aacdec.c:(.text.unlikely+0x45): undefined reference to `aacDecoder_Open'
libfdk-aacdec.c:(.text.unlikely+0x82): undefined reference to `aacDecoder_ConfigRaw'
libfdk-aacdec.c:(.text.unlikely+0xb7): undefined reference to `aacDecoder_SetParam'
libfdk-aacdec.c:(.text.unlikely+0x129): undefined reference to `aacDecoder_SetParam'
libfdk-aacdec.c:(.text.unlikely+0x187): undefined reference to `aacDecoder_AncDataInit'
libfdk-aacdec.c:(.text.unlikely+0x1ac): undefined reference to `aacDecoder_SetParam'
libfdk-aacdec.c:(.text.unlikely+0x1d1): undefined reference to `aacDecoder_SetParam'
libfdk-aacdec.c:(.text.unlikely+0x1f2): undefined reference to `aacDecoder_SetParam'
libfdk-aacdec.c:(.text.unlikely+0x213): undefined reference to `aacDecoder_SetParam'
libfdk-aacdec.c:(.text.unlikely+0x22f): undefined reference to `aacDecoder_SetParam'
../../../deps/ffmpeg/build/desktop/x86_64/lib/libavcodec.a(libfdk-aacdec.o):libfdk-aacdec.c:(.text.unlikely+0x250): more undefined references to `aacDecoder_SetParam' follow
../../../deps/ffmpeg/build/desktop/x86_64/lib/libavcodec.a(libfdk-aacenc.o): In function `aac_encode_close':
libfdk-aacenc.c:(.text+0xf9): undefined reference to `aacEncClose'
../../../deps/ffmpeg/build/desktop/x86_64/lib/libavcodec.a(libfdk-aacenc.o): In function `aac_encode_frame':
libfdk-aacenc.c:(.text+0x2c1): undefined reference to `aacEncEncode'
../../../deps/ffmpeg/build/desktop/x86_64/lib/libavcodec.a(libfdk-aacenc.o): In function `aac_encode_init':
libfdk-aacenc.c:(.text.unlikely+0x3c): undefined reference to `aacEncOpen'
libfdk-aacenc.c:(.text.unlikely+0x7c): undefined reference to `aacEncoder_SetParam'
libfdk-aacenc.c:(.text.unlikely+0xb8): undefined reference to `aacEncoder_SetParam'
libfdk-aacenc.c:(.text.unlikely+0xfa): undefined reference to `aacEncoder_SetParam'
libfdk-aacenc.c:(.text.unlikely+0x180): undefined reference to `aacEncoder_SetParam'
libfdk-aacenc.c:(.text.unlikely+0x25d): undefined reference to `aacEncoder_SetParam'
../../../deps/ffmpeg/build/desktop/x86_64/lib/libavcodec.a(libfdk-aacenc.o):libfdk-aacenc.c:(.text.unlikely+0x28d): more undefined references to `aacEncoder_SetParam' follow
../../../deps/ffmpeg/build/desktop/x86_64/lib/libavcodec.a(libfdk-aacenc.o): In function `aac_encode_init':
libfdk-aacenc.c:(.text.unlikely+0x567): undefined reference to `aacEncEncode'
libfdk-aacenc.c:(.text.unlikely+0x5a1): undefined reference to `aacEncInfo'
../../../deps/ffmpeg/build/desktop/x86_64/lib/libavcodec.a(libvpxdec.o): In function `vpx_decode':
libvpxdec.c:(.text+0x58): undefined reference to `vpx_codec_decode'
libvpxdec.c:(.text+0xa2): undefined reference to `vpx_codec_get_frame'
libvpxdec.c:(.text+0x10c): undefined reference to `vpx_codec_error'
libvpxdec.c:(.text+0x117): undefined reference to `vpx_codec_error_detail'
libvpxdec.c:(.text+0x19e): undefined reference to `vpx_codec_decode'
libvpxdec.c:(.text+0x1ae): undefined reference to `vpx_codec_error'
libvpxdec.c:(.text+0x1ca): undefined reference to `vpx_codec_get_frame'
libvpxdec.c:(.text+0x560): undefined reference to `vpx_codec_vp9_dx_algo'
libvpxdec.c:(.text+0x58f): undefined reference to `vpx_codec_vp8_dx_algo'
../../../deps/ffmpeg/build/desktop/x86_64/lib/libavcodec.a(libvpxdec.o): In function `vpx_free':
libvpxdec.c:(.text.unlikely+0x9): undefined reference to `vpx_codec_destroy'
libvpxdec.c:(.text.unlikely+0x18): undefined reference to `vpx_codec_destroy'
../../../deps/ffmpeg/build/desktop/x86_64/lib/libavcodec.a(libvpxdec.o): In function `vpx_init':
libvpxdec.c:(.text.unlikely+0x87): undefined reference to `vpx_codec_version_str'
libvpxdec.c:(.text.unlikely+0xa5): undefined reference to `vpx_codec_build_config'
libvpxdec.c:(.text.unlikely+0xdf): undefined reference to `vpx_codec_dec_init_ver'
libvpxdec.c:(.text.unlikely+0xed): undefined reference to `vpx_codec_error'
../../../deps/ffmpeg/build/desktop/x86_64/lib/libavcodec.a(libvpxdec.o): In function `vp8_init':
libvpxdec.c:(.text.unlikely+0x134): undefined reference to `vpx_codec_vp8_dx_algo'
../../../deps/ffmpeg/build/desktop/x86_64/lib/libavcodec.a(libvpxdec.o): In function `vp9_init':
libvpxdec.c:(.text.unlikely+0x142): undefined reference to `vpx_codec_vp9_dx_algo'
../../../deps/ffmpeg/build/desktop/x86_64/lib/libavcodec.a(libvpxenc.o): In function `vpx_encode':
libvpxenc.c:(.text+0xda): undefined reference to `vpx_codec_encode'
libvpxenc.c:(.text+0x2b3): undefined reference to `vpx_codec_encode'
libvpxenc.c:(.text+0x33a): undefined reference to `vpx_codec_get_cx_data'
libvpxenc.c:(.text+0x3cd): undefined reference to `vpx_codec_get_cx_data'
../../../deps/ffmpeg/build/desktop/x86_64/lib/libavcodec.a(libvpxenc.o): In function `log_encoder_error':
libvpxenc.c:(.text.unlikely+0x351): undefined reference to `vpx_codec_error'
libvpxenc.c:(.text.unlikely+0x35c): undefined reference to `vpx_codec_error_detail'
../../../deps/ffmpeg/build/desktop/x86_64/lib/libavcodec.a(libvpxenc.o): In function `codecctl_int':
libvpxenc.c:(.text.unlikely+0x43a): undefined reference to `vpx_codec_control_'
../../../deps/ffmpeg/build/desktop/x86_64/lib/libavcodec.a(libvpxenc.o): In function `vpx_init':
libvpxenc.c:(.text.unlikely+0x4fb): undefined reference to `vpx_codec_get_caps'
libvpxenc.c:(.text.unlikely+0x503): undefined reference to `vpx_codec_version_str'
libvpxenc.c:(.text.unlikely+0x521): undefined reference to `vpx_codec_build_config'
libvpxenc.c:(.text.unlikely+0x563): undefined reference to `vpx_codec_enc_config_default'
libvpxenc.c:(.text.unlikely+0x573): undefined reference to `vpx_codec_err_to_string'
libvpxenc.c:(.text.unlikely+0xc2c): undefined reference to `vpx_codec_enc_init_ver'
libvpxenc.c:(.text.unlikely+0xc86): undefined reference to `vpx_codec_enc_init_ver'
libvpxenc.c:(.text.unlikely+0xffb): undefined reference to `vpx_img_wrap'
libvpxenc.c:(.text.unlikely+0x1040): undefined reference to `vpx_img_wrap'
../../../deps/ffmpeg/build/desktop/x86_64/lib/libavcodec.a(libvpxenc.o): In function `vp8_init':
libvpxenc.c:(.text.unlikely+0x10be): undefined reference to `vpx_codec_vp8_cx'
../../../deps/ffmpeg/build/desktop/x86_64/lib/libavcodec.a(libvpxenc.o): In function `vp9_init':
libvpxenc.c:(.text.unlikely+0x10d3): undefined reference to `vpx_codec_vp9_cx'
../../../deps/ffmpeg/build/desktop/x86_64/lib/libavcodec.a(libvpxenc.o): In function `vpx_free':
...

对于ubuntu来说,它怎么可能不依赖x264, libfdk-aacdec, libvpxdec, etc,但是当我使用我的编译库时,我必须提供它们。

EN

回答 1

Ask Ubuntu用户

发布于 2019-09-09 17:12:41

最新的Ubuntu的ffmpeg (7:4.1.3-0ubuntu1) (迪斯科丁戈)(截止2022年,(7:4.4-6 ubuntu5))可从该网页底部获得。Ubuntu使用Debian构建过程作为ffmpeg。

要从源代码构建与Debian或Ubuntu完全相同的方式,您需要使用"debmake“和"debuild”。有关完整的文档,请参阅“Debian维护人员指南”(2019-03-26)教程。

“键”命令不会从源中“生成”,它会修改源。是"debuild“命令进行了生成(但不是直接使用"make",而是使用了"dpkg-buildpackage”)。

从源头构建的通常方法是:

代码语言:javascript
复制
$ tar -xzmf debhello-0.0.tar.gz
$ cd debhello-0.0
$ make
$ make install

从源构建Debian的方法:

代码语言:javascript
复制
$ tar -xzmf debhello-0.0.tar.gz
$ cd debhello-0.0
$ debmake
  ... manual customization
$ debuild
  ...

可以使用以下方法提取源和生成依赖项:

代码语言:javascript
复制
sudo apt-get source ffmpeg
sudo apt-get build-dep ffmpeg

有关使用该命令的详细信息,请参阅Ubuntu的找人帮忙

如果希望生成的构建与安装包的结果类似于,请使用"debmake“,然后修改目录中的文件。在进行修改(不破坏任何内容)之后,输入"debuild“来创建类似的可执行文件(添加或删除功能)。这个黑客的高级实例也是可用的,请参阅维护人员指南(这个答案的顶部有第三个链接)。

首先尝试一个简单的例子(不需要修改),除非你对上面的说明感到舒服。也见Debian构建教程Wiki

在我们的SuperUser站点上也有关于Debian的解释:如何在Debian上安装FFmpeg?

票数 2
EN
页面原文内容由Ask Ubuntu提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://askubuntu.com/questions/1169498

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档