[FFmpeg-trac] #10009(ffmpeg:new): FFmpeg not buildable without pthreads?

FFmpeg trac at avcodec.org
Fri Nov 4 10:31:49 EET 2022


#10009: FFmpeg not buildable without pthreads?
-------------------------------------+-------------------------------------
             Reporter:  Jozef        |                     Type:  defect
  Chutka                             |
               Status:  new          |                 Priority:  normal
            Component:  ffmpeg       |                  Version:
                                     |  unspecified
             Keywords:  pthreads     |               Blocked By:
             Blocking:               |  Reproduced by developer:  0
Analyzed by developer:  0            |
-------------------------------------+-------------------------------------
 When configuring ffmpeg (2 days old master version 5661c87) with
 emscripten with flags `--disable-pthreads --disable-w32threads --disable-
 os2threads`:

 {{{
 emconfigure ./configure --target-os=none --arch=x86_32 --enable-cross-
 compile --enable-version3
   --enable-zlib --enable-libopenh264...
   --disable-x86asm --disable-inline-asm --disable-stripping
   --disable-programs --disable-doc --disable-debug --disable-runtime-
 cpudetect
   --disable-autodetect
   --extra-cflags="-O3 -msimd128"
   --extra-cxxflags="-O3 -msimd128"
   --extra-ldflags="-O3 -msimd128"
   --pkg-config-flags="--static"
   --nm="llvm-nm" --ar=emar --ranlib=emranlib --cc=emcc --cxx=em++
 --objcc=emcc --dep-cc=emcc
   --disable-pthreads --disable-w32threads --disable-os2threads

 emmake make -j

 emcc -O3 -msimd128 -I. -I./fftools -I$BUILD_DIR/include
   -Llibavcodec -Llibavdevice ... -L$BUILD_DIR/lib
   -Wno-deprecated-declarations -Wno-pointer-sign -Wno-implicit-int-float-
 conversion -Wno-switch -Wno-parentheses -Qunused-arguments
   -lavdevice -lavfilter -lavformat -lavcodec -lswresample -lswscale
 -lavutil -lm ...
   fftools/cmdutils.c fftools/ffmpeg.c fftools/ffmpeg_demux.c
 fftools/ffmpeg_filter.c fftools/ffmpeg_hw.c fftools/ffmpeg_mux.c
 fftools/ffmpeg_mux_init.c fftools/ffmpeg_opt.c fftools/objpool.c
 fftools/opt_common.c fftools/sync_queue.c fftools/thread_queue.c
   -lworkerfs.js -s USE_SDL=2 -s INVOKE_RUN=0 -s EXIT_RUNTIME=1 -s
 MODULARIZE=1
   -s EXPORT_NAME="createFFmpeg" -s EXPORTED_FUNCTIONS="[_main]" -s
 EXPORTED_RUNTIME_METHODS="[callMain, FS, WORKERFS]" -s
 INITIAL_MEMORY=128mb -s ENVIRONMENT=worker -o ffmpeg.js
 }}}

 Configure runs ok, however the following command fails with some phtread
 related errors:

 {{{
 fftools/ffmpeg_demux.c:358:5: error: call to undeclared function
 'pthread_join'; ISO C99 and later do not support implicit function
 declarations [-Wimplicit-function-declaration]
     pthread_join(d->thread, NULL);
     ^
 fftools/ffmpeg_demux.c:358:5: note: did you mean 'pthread_kill'?
 /ffmpeg/modules/emsdk/upstream/emscripten/cache/sysroot/include/signal.h:226:5:
 note: 'pthread_kill' declared here
 int pthread_kill(pthread_t, int);
     ^
 fftools/ffmpeg_demux.c:397:16: error: call to undeclared function
 'pthread_create'; ISO C99 and later do not support implicit function
 declarations [-Wimplicit-function-declaration]
     if ((ret = pthread_create(&d->thread, NULL, input_thread, d))) {
                ^
 2 errors generated.
 emcc: error: '/ffmpeg/modules/emsdk/upstream/bin/clang -target wasm32
 -unknown-emscripten -fignore-exceptions -fvisibility=default -mllvm
 -combiner-global-alias-analysis=false -mllvm -enable-emscripten-sjlj
 -mllvm -disable-lsr -DEMSCRIPTEN -Werror=implicit-function-declaration
 -I/ffmpeg/modules/emsdk/upstream/emscripten/cache/sysroot/include/SDL2
 --sysroot=/ffmpeg/modules/emsdk/upstream/emscripten/cache/sysroot -Xclang
 -iwithsysroot/include/compat -O3 -I/ffmpeg/build/include -msimd128 -I.
 -I./fftools -I/ffmpeg/build/include -Wno-deprecated-declarations -Wno-
 pointer-sign -Wno-implicit-int-float-conversion -Wno-switch -Wno-
 parentheses -Qunused-arguments fftools/ffmpeg_demux.c -c -o
 /tmp/emscripten_temp_0b3ma1cz/ffmpeg_demux_2.o' failed (returned 1)
 root at cs-1036883351707-default:/ffmpeg#
 }}}

 I can build a version with pthreads by removing `--disable-*threads` flags
 from emconfigure and adding `-pthread -s PROXY_TO_PTHREAD=1 -s -s
 USE_PTHREADS=1` into emcc.

 I tried various flags but could not get building single thread version. As
 I only have setup for emscripten build, I can not confirm if some more
 standard single thread build works or not. But having references to
 `pthread_create()` or `pthread_join()` seems suspicious.

 Can you please verify if single thread ffmpeg version is still buildable,
 and if so, do you have any idea what I am doing wrong?
-- 
Ticket URL: <https://trac.ffmpeg.org/ticket/10009>
FFmpeg <https://ffmpeg.org>
FFmpeg issue tracker


More information about the FFmpeg-trac mailing list