【问题标题】:FFmpeg installation on Raspberry Pi Zero W: Undefined references to __atomicRaspberry Pi Zero W 上的 FFmpeg 安装:对 __atomic 的未定义引用
【发布时间】:2020-06-14 15:05:04
【问题描述】:

我正在尝试在我的 Raspberry Pi Zero W 上安装 ffmpeg,但我收到了几条错误消息。

操作系统:Raspberry Pi 操作系统(32 位)精简版(2020 年 5 月)

我已经执行了以下命令:

sudo apt update
sudo apt full-upgrade
sudo apt install git
git clone https://github.com/FFmpeg/FFmpeg.git
cd FFmpeg
./configure --arch=armel --target-os=linux --enable-gpl --enable-omx --enable-omx-rpi --enable-nonfree
make -j2
sudo make install

最后一条命令的输出:

...
LD      ffmpeg_g
/usr/bin/ld: libavformat/libavformat.a(fifo.o): in function `fifo_init':
/home/pi/FFmpeg/libavformat/fifo.c:519: undefined reference to `__atomic_store_8'
/usr/bin/ld: libavformat/libavformat.a(fifo.o): in function `fifo_write_trailer':
/home/pi/FFmpeg/libavformat/fifo.c:624: undefined reference to `__atomic_fetch_add_8'
/usr/bin/ld: /home/pi/FFmpeg/libavformat/fifo.c:631: undefined reference to `__atomic_store_8'
/usr/bin/ld: libavformat/libavformat.a(fifo.o): in function `fifo_thread_write_packet':
/home/pi/FFmpeg/libavformat/fifo.c:188: undefined reference to `__atomic_fetch_sub_8'
/usr/bin/ld: libavformat/libavformat.a(fifo.o): in function `fifo_consumer_thread':
/home/pi/FFmpeg/libavformat/fifo.c:457: undefined reference to `__atomic_load_8'
/usr/bin/ld: libavformat/libavformat.a(fifo.o): in function `fifo_write_packet':
/home/pi/FFmpeg/libavformat/fifo.c:597: undefined reference to `__atomic_fetch_add_8'
collect2: error: ld returned 1 exit status
make: *** [Makefile:114: ffmpeg_g] Error 1

也许缺少另一个包?我必须更改配置中的任何内容吗?

【问题讨论】:

    标签: ffmpeg raspberry-pi


    【解决方案1】:

    将以下内容添加到 ./configure 参数中。

    --extra-ldflags="-latomic"
    

    所以你的命令变成了:

    ./configure --extra-ldflags="-latomic" --arch=armel --target-os=linux --enable-gpl --enable-omx --enable-omx-rpi --enable-nonfree
    

    在安装了最新版本的“something”的 arm 平台上,我遇到了几个似乎不再自动链接原子库的程序(包括 ffmpeg)给你这个或类似的错误。我还没有时间找出究竟是什么原因造成的或为什么。

    上述命令手动告诉配置脚本在链接时包含原子。

    尝试启用 Pi 的硬件 h264 编码?

    【讨论】:

    • 这行得通;如果我不必为此重新配置/构建整个项目,我会喜欢它。也许我可以通过find . -name '*.o' -print0|xargs -0 touch
    • P.S.:这对于 PowerPC 32 位也很方便。
    • 这不适用于 FFmpeg v4.4 和我的 GCC 交叉编译设置。原因是 LDFLAGS 部分在最终链接器命令中的对象之前结束。改用--extra-libs=-latomic就成功了。
    • 谢谢@blentorin!
    【解决方案2】:

    由于我不知道上述行为的原因,我可以确认这也发生在我身上,在 Raspberry Pi 3 上。

    我找到了一种解决方法,通过以下命令安装最旧的软件包:

    wget -O ffmpeg-4.1.5.tar.bz2 https://ffmpeg.org/releases/ffmpeg-4.1.5.tar.bz2
    
    tar xvjf ffmpeg-4.1.5.tar.bz2
    

    更新: 我发现从源代码安装有一些问题,作为 Pi Zero f.ex CPU 可能是硬浮动的,所以你应该在编译前更改一些标志。

    如果您不介意版本,请通过以下方式安装已预编译的软件包:

    sudo apt install ffmpeg -y
    

    【讨论】:

      【解决方案3】:

      我还尝试使用 Raspberry Pi Zero W 以 1080p 将视频直播到 Youtube。但是它也会在 2-3 分钟后崩溃。我的猜测是它无法处理它,所以我将其降级为 720p。

      我能够毫无问题地运行 720p@30fps/2000Kbps。我测试了大约 2 个小时,没有掉帧或任何其他问题,非常稳定。

      我用来完成的设置如下:

      v4l2-ctl --set-fmt-video=width=1280,height=720,pixelformat=4 
          v4l2-ctl --set-ctrl=rotate=180
          v4l2-ctl --overlay=1
          v4l2-ctl -p 30
          v4l2-ctl --set-ctrl=video_bitrate=2000000
          ffmpeg -ar 44100 -ac 2 -acodec pcm_s16le -f s16le -i /dev/zero -f h264 -framerate 30 -i /dev/video0 -vcodec copy -acodec aac -ab 128k -g 60 -f flv -r 30 rtmp://a.rtmp.youtube.com/live2/YOURKEY
      

      【讨论】:

        猜你喜欢
        • 2021-10-05
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        • 2020-05-24
        • 1970-01-01
        • 1970-01-01
        • 2020-05-22
        相关资源
        最近更新 更多