2

我正在使用ndk r9b版本的android中构建ffmpeg 2.1.3。

我使用了以下命令。

./configure --enable-shared --prefix=/home/fbuild 
             --cross-prefix=arm-linux-androideabi- 
             --enable-cross-compile 
             --target-os=linux --arch=arm --enable-gpl 
             --enable-libx264 --extra-cflags=-I/home/fbuild/include 
             --extra-ldflags=-L/home/fbuild/lib --disable-doc 
             --disable-ffmpeg --enable-network --disable-ffplay 
             --disable-ffprobe --disable-ffserver --enable-avresample 
             --enable-decoders 
             --enable-encoders 
             --enable-muxers 
             --enable-demuxers 
             --enable-parsers --enable-protocols --enable-filters 
             --enable-avresample --disable-indevs --enable-indev=lavfi 
             --disable-outdevs --enable-hwaccels --enable-libx264 
             --enable-zlib --enable-muxer=md5 --enable-runtime-cpudetect  
             --cpu=cortex-a8 
             --enable-pthreads --enable-static

在 config.log 中

 main:ffconf.82qqjSTF.c(.text+0x4): error: undefined reference to '**pthread_cancel**

这清楚地表明, pthread_cancel 不可用。

这是一个现有的问题,还是我们有任何其他解决方案?

我启用了“--enable-pthreads”,

我正在尝试通过 UDP 流式传输 RTSP 流

非常感谢您的帮助。谢谢。

4

1 回答 1

1

这是一个现有的问题吗?

官方 NDK 文档指出:

pthread_cancel()Bionic 将不支持,因为这样做会使 C 库显着变大而收益却很小。[...] 所有这一切都与仿生设计目标背道而驰。如果您的代码依赖于线程取消,请考虑替代方案。

请参阅仿生概述部分

话虽如此,ffmpeg 配置脚本自动检测到这一点:

if enabled pthreads; then
  check_func pthread_cancel
fi

pthread_cancel因此,如果 ffmpeg不可用,我假设 ffmpeg 在实现方面具有后备功能(请参阅#if HAVE_PTHREAD_CANCEL章节)。

于 2014-03-12T09:39:43.140 回答