wasm-ld: ошибка: слишком мала начальная память, требуется 18317952 байта
Я хочу скомпилировать ffmpeg в wasm. После загрузки исходного кода Ffmpeg и emsak я использую команду ниже для сборки.
emconfigure ./configure --cc="emcc" --enable-cross-compile --target-os=none --arch=x86_32 --cpu=generic \
--disable-ffplay --disable-ffprobe --disable-asm --disable-doc --disable-devices --disable-pthreads --disable-w32threads --disable-network \
--disable-hwaccels --disable-parsers --disable-bsfs --disable-debug --disable-protocols --disable-indevs --disable-outdevs --enable-protocol=file --ranlib="emranlib"
emmake make
то я получил такую ошибку:
emcc: предупреждение: игнорирование неподдерживаемого флага компоновщика: -rpath-link=:libpostproc:libswresample:libswscale:libavfilter:libavdevice:libavformat:libavcodec:libavutil:libavresample
[-Wlinkflags]wasm-ld: error: начальная память слишком мала, требуется 18317952 байта emcc: error: '/home/ubuntu/emsdk/upstream/bin/wasm-ld -o /tmp/emscripten_temp_t3l4sg_k/ffmpeg_g.wasm -LlibavcodeLlibavdevice -Llibavfilter -Llibavformat -L/home/ubuntu/emsdk/upstream/emscripten/system/local/lib -Llibavresample -L/home/ubuntu/emsdk/upstream/emscripten/system/lib -Llibavutil -L/home/ubuntuemsdk / апстрим /emscripten/cache/wasm -Llibpostproc -Llibswscale -Llibswresample -z noexecstack fftools/ffmpeg_opt.o fftools/ffmpeg_filter.o fftools/ffmpeg_filter.o fftools / ffmpeg_filter.o fftools / ffmpeg_avovice.libavfilter.a libavformat/libavformat.a libavcodec/libavcodec.a libswresample/libswresample.a libswscale/libswscale.a libavutil/libavutil.a /home/ubuntu/emsdk/upstream/emscripten/cache/wasm/libc.a /home/ubuntu/emsdk/upstream/emscripten/cache/wasm/libcompiler_rt.a /home/ubuntu/emsdk/upstream/emscripten/cache/wasm/libc++-noexcept.a /home/ubuntu/emsdk/upstream/emscripten cache / wasm / libC++abi-noexcept.a /home/ubuntu/emsdk/upstream/emscripten/cache/wasm/libdlmalloc.a /home/ubuntu/emsdk/upstream/emscripten/cache/wasm/libpthread_stub.a /home/ubuntu/emsdk/upstream/emscripten/cache/wasm/libc_rt_wasm.a /home/ubuntu/emsdk/upstream/emscripten/cache/wasm/libsockets.a -mllvm -combiner-global-alias-analysis=false -mllvm -enable-emscripten-sjlj -mllvm -disable-lsr --allow-undefined --import-memory --import-table --strip-debug --export main --export malloc --export free --export stackSave --export stackRestore --export stackAlloc --export __data_end --export __wasm_call_ctors --export fflush --export __errno_location --export _get_tzname --export _get_daylight --export - _get_timezone -export memalign --export memset -z stack-size=5242880 --initial-memory=16777216 --no-entry --max-memory=16777216 --global-base=1024'не удалось
как я могу изменить настройку начальной памяти emcc по умолчанию?
1 ответ
Ответ есть здесь, в этом выпуске github .
Самым быстрым решением было установить флаг общей памяти на
-s TOTAL_MEMORY=num_bytes
. Просто убедитесь, что число, которое вы передаете, кратно 64 КБ, иначе оно не скомпилируется.
Кроме того, если вы собираетесь изменить кодовую базу, я бы округлил, так как этот размер для «необходимых байтов» может измениться, в моем случае он был ограничен 60 МБ (для кода, не связанного с этим).