所以有这样一个库,我正在尝试使用ffmpeg.js,并且我在自定义Makefile。我已经做了我想做的所有事情,但是在构建时,我得到了错误ERROR: opus not found using pkg-config。现在我有两个问题:
--extra-cflags="-s USE_ZLIB=1 -I../lame/dist/include -I../libvpx/dist/include"这个配置最初是--extra-cflags="-s USE_ZLIB=1 -I../lame/dist/include"的,但我想包括两个文件夹,所以合并是正确的还是这就是我出错的地方。
完整的Makefile如下所示(从存储库中的原始Makefile有很多更改),是不是我做错了什么?
PRE_JS = build/pre.js
POST_JS_SYNC = build/post-sync.js
COMMON_FILTERS = aresample scale crop overlay hstack vstack
COMMON_DEMUXERS = matroska ogg mov mp3 wav image2 concat
COMMON_DECODERS = vp8 vp9 h264 vorbis opus mp3 aac pcm_s16le mjpeg png
COMMON_BSFS = vp9_superframe
MUXERS = mp4 mp3 webm ogg null
ENCODERS = libx264 libmp3lame aac libvpx_vp8 libopus
FFMPEG_BC = build/ffmpeg/ffmpeg.bc
FFMPEG_PC_PATH = ../x264/dist/lib/pkgconfig
SHARED_DEPS = \
build/lame/dist/lib/libmp3lame.so \
build/x264/dist/lib/libx264.so \
build/opus/dist/lib/libopus.so \
build/libvpx/dist/lib/libvpx.so
all: ffmpeg.js
clean: clean-js \
clean-opus clean-libvpx clean-lame \
clean-x264 clean-ffmpeg
clean-js:
rm -f ffmpeg*.js
clean-opus:
cd build/opus && git clean -xdf
clean-libvpx:
cd build/libvpx && git clean -xdf
clean-lame:
cd build/lame && git clean -xdf
clean-x264:
cd build/x264 && git clean -xdf
clean-ffmpeg:
cd build/ffmpeg-mp4 && git clean -xdf
build/opus/configure:
cd build/opus && ./autogen.sh
build/opus/dist/lib/libopus.so: build/opus/configure
cd build/opus && \
emconfigure ./configure \
CFLAGS=-O3 \
--prefix="$$(pwd)/dist" \
--disable-static \
--disable-doc \
--disable-extra-programs \
--disable-asm \
--disable-rtcd \
--disable-intrinsics \
--disable-hardening \
--disable-stack-protector \
&& \
emmake make -j && \
emmake make install
build/libvpx/dist/lib/libvpx.so:
cd build/libvpx && \
git reset --hard && \
patch -p1 < ../libvpx-fix-ld.patch && \
emconfigure ./configure \
--prefix="$$(pwd)/dist" \
--target=generic-gnu \
--disable-dependency-tracking \
--disable-multithread \
--disable-runtime-cpu-detect \
--enable-shared \
--disable-static \
\
--disable-examples \
--disable-docs \
--disable-unit-tests \
--disable-webm-io \
--disable-libyuv \
--disable-vp8-decoder \
--disable-vp9 \
&& \
emmake make -j && \
emmake make install
build/lame/dist/lib/libmp3lame.so:
cd build/lame/lame && \
git reset --hard && \
patch -p2 < ../../lame-fix-ld.patch && \
emconfigure ./configure \
CFLAGS="-DNDEBUG -O3" \
--prefix="$$(pwd)/../dist" \
--host=x86-none-linux \
--disable-static \
\
--disable-gtktest \
--disable-analyzer-hooks \
--disable-decoder \
--disable-frontend \
&& \
emmake make -j && \
emmake make install
build/x264/dist/lib/libx264.so:
cd build/x264 && \
emconfigure ./configure \
--prefix="$$(pwd)/dist" \
--extra-cflags="-Wno-unknown-warning-option" \
--host=x86-none-linux \
--disable-cli \
--enable-shared \
--disable-opencl \
--disable-thread \
--disable-interlaced \
--bit-depth=8 \
--chroma-format=420 \
--disable-asm \
\
--disable-avs \
--disable-swscale \
--disable-lavf \
--disable-ffms \
--disable-gpac \
--disable-lsmash \
&& \
emmake make -j && \
emmake make install
FFMPEG_COMMON_ARGS = \
--cc=emcc \
--ranlib=emranlib \
--enable-cross-compile \
--target-os=none \
--arch=x86 \
--disable-runtime-cpudetect \
--disable-asm \
--disable-fast-unaligned \
--disable-pthreads \
--disable-w32threads \
--disable-os2threads \
--disable-debug \
--disable-stripping \
--disable-safe-bitstream-reader \
\
--disable-all \
--enable-ffmpeg \
--enable-avcodec \
--enable-avformat \
--enable-avfilter \
--enable-swresample \
--enable-swscale \
--disable-network \
--disable-d3d11va \
--disable-dxva2 \
--disable-vaapi \
--disable-vdpau \
$(addprefix --enable-bsf=,$(COMMON_BSFS)) \
$(addprefix --enable-decoder=,$(COMMON_DECODERS)) \
$(addprefix --enable-demuxer=,$(COMMON_DEMUXERS)) \
--enable-protocol=file \
$(addprefix --enable-filter=,$(COMMON_FILTERS)) \
--disable-bzlib \
--disable-iconv \
--disable-libxcb \
--disable-lzma \
--disable-sdl2 \
--disable-securetransport \
--disable-xlib \
--enable-zlib
build/ffmpeg/ffmpeg.bc: $(SHARED_DEPS)
cd build/ffmpeg-mp4 && \
EM_PKG_CONFIG_PATH=$(FFMPEG_PC_PATH) emconfigure ./configure \
$(FFMPEG_COMMON_ARGS) \
$(addprefix --enable-encoder=,$(ENCODERS)) \
$(addprefix --enable-muxer=,$(MUXERS)) \
--enable-gpl \
--enable-libmp3lame \
--enable-libx264 \
--enable-libopus \
--enable-libvpx \
--extra-cflags="-s USE_ZLIB=1 -I../lame/dist/include -I../libvpx/dist/include" \
--extra-ldflags="-L../lame/dist/lib -L../libvpx/dist/lib" \
&& \
emmake make -j && \
cp ffmpeg ffmpeg.bc
EMCC_COMMON_ARGS = \
-O3 \
--closure 1 \
--memory-init-file 0 \
-s WASM=0 \
-s WASM_ASYNC_COMPILATION=0 \
-s ASSERTIONS=0 \
-s EXIT_RUNTIME=1 \
-s NODEJS_CATCH_EXIT=0 \
-s NODEJS_CATCH_REJECTION=0 \
-s TOTAL_MEMORY=67108864 \
-lnodefs.js -lworkerfs.js \
--pre-js $(PRE_JS) \
-o $@
ffmpeg.js: $(FFMPEG_BC) $(PRE_JS) $(POST_JS_SYNC)
emcc $(FFMPEG_BC) $(SHARED_DEPS) \
--post-js $(POST_JS_SYNC) \
$(EMCC_COMMON_ARGS) -O2我试图实现的是将一些webm编码器和多路复用器组合到mp4模块中,以便我对所有webm和mp4格式类型只使用一个模块。
还有一件事要了解我,整个Makefile和C语言,构建它对我来说是一个全新的领域,我只是做了我认为正确的事情,提前谢谢。
发布于 2020-10-24 22:09:02
你有坚实的目标是件好事。没有这些,问题就更难解决了。
您需要做的是了解在没有make或Makefiles的情况下为实现这些目标而运行的命令,以及在此过程中创建的文件。这样,您就可以将这些命令编码为
file_to_be_created:source_file_1 source_file_2 source_file_3
<tab>command to be executed
<tab>second command to be executed这些标签是make历史上错误选择的一个不幸的副作用。
这样,您就可以修改Makefile了。如果您有一个从其他来源构建的源代码,使用上面的模式创建两个" make“规则,make将正确地确定构建顺序并运行所需的命令。如果make确定创建的文件比其源文件新,它将跳过构建创建的文件。
正如您所看到的,尽管make并不是很复杂,但它几乎不能帮助您了解必须运行的命令。也许你已经知道它们了;但是,如果你不知道,我会把你的个人知识和你能从Makefile中读出的东西结合起来,看看你是否能设计出你需要的make文件规则。
最初,我会通过创建新规则和新文件来做到这一点,因为如果您违反了所需的规则,很可能要到很久以后才会知道。一旦你建立了一些东西,你就可以检查你是否应该将你的规则应用到一些现有的规则中。
祝好运!
https://stackoverflow.com/questions/64514061
复制相似问题