#10009 closed defect (invalid)
FFmpeg not buildable without pthreads?
Reported by: | Jozef Chutka | Owned by: | |
---|---|---|---|
Priority: | normal | Component: | undetermined |
Version: | unspecified | Keywords: | threads |
Cc: | Blocked By: | ||
Blocking: | Reproduced by developer: | no | |
Analyzed by developer: | no |
Description (last modified by )
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@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 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()
in ffmpeg_demux.c 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?
Change History (4)
comment:1 by , 2 years ago
Description: | modified (diff) |
---|
comment:2 by , 2 years ago
Resolution: | → invalid |
---|---|
Status: | new → closed |
comment:3 by , 2 years ago
Component: | ffmpeg → undetermined |
---|---|
Keywords: | threads added; pthreads removed |
comment:4 by , 2 years ago
My setup is working for cli tool with emscripten inspired by https://github.com/ffmpegwasm/ffmpeg.wasm-core/blob/n4.3.1-wasm/wasm/build-scripts/configure-ffmpeg.sh and https://github.com/ffmpegwasm/ffmpeg.wasm-core/blob/n4.3.1-wasm/wasm/build-scripts/build-ffmpeg.sh ...
Are there arguments to be changed to follow the supported path?
I understand threading is out of the quesstion now.
Actually, FFmpeg (the cli tool, not the libraries) depends upons threading since commit 760ce4bc0bd11f74f0851c0a662dd5cae888df83. It seems to me you manually tried to compile the fftools after having run configure with --disable-programs. This is not supported and I am therefore closing this as invalid. Reopen if I am wrong about this.