emcc: error: INITIAL_MEMORY must be a multiple of WebAssembly page size (64KiB), was 20777216

NDIS herman 502浏览
公告:“业余草”微信公众号提供免费CSDN下载服务(只下Java资源),关注业余草微信公众号,添加作者微信:codedq,发送下载链接帮助你免费下载!
本博客日IP超过2000,PV 3000 左右,急需赞助商。
极客时间所有课程通过我的二维码购买后返现24元微信红包,请加博主新的微信号:codedq,之前的微信号好友位已满,备注:返现
受密码保护的文章请关注“业余草”公众号,回复关键字“0”获得密码
所有面试题(java、前端、数据库、springboot等)一网打尽,请关注文末小程序
视频教程免费领

过了一个年,感觉好久都没写文章了。今天来个开年新篇,记录一个网友发给我的异常信息。

完整的异常信息如下:

emcc: warning: ignoring unsupported linker flag: `-rpath-link=:libpostproc:libswresample:libswscale:libavfilter:libavdevice:libavformat:libavcodec:libavutil:libavresample` [-Wlinkflags]
wasm-ld: error: initial memory too small, 17188032 bytes needed
emcc: error: '/Users/xtt/wasm/emsdk/emsdk/upstream/bin/wasm-ld -o ffmpeg_g.wasm -Llibavcodec -Llibavdevice -Llibavfilter -Llibavformat -Llibavresample -Llibavutil -Llibpostproc -Llibswscale -Llibswresample -z noexecstack fftools/ffmpeg_opt.o fftools/ffmpeg_filter.o fftools/ffmpeg_hw.o fftools/cmdutils.o fftools/ffmpeg.o libavdevice/libavdevice.a libavfilter/libavfilter.a libavformat/libavformat.a libavcodec/libavcodec.a libswresample/libswresample.a libswscale/libswscale.a libavutil/libavutil.a -L/Users/xtt/wasm/emsdk/emsdk/upstream/emscripten/cache/sysroot/lib/wasm32-emscripten /Users/xtt/wasm/emsdk/emsdk/upstream/emscripten/cache/sysroot/lib/wasm32-emscripten/libgl.a /Users/xtt/wasm/emsdk/emsdk/upstream/emscripten/cache/sysroot/lib/wasm32-emscripten/libal.a /Users/xtt/wasm/emsdk/emsdk/upstream/emscripten/cache/sysroot/lib/wasm32-emscripten/libhtml5.a /Users/xtt/wasm/emsdk/emsdk/upstream/emscripten/cache/sysroot/lib/wasm32-emscripten/libc.a /Users/xtt/wasm/emsdk/emsdk/upstream/emscripten/cache/sysroot/lib/wasm32-emscripten/libcompiler_rt.a /Users/xtt/wasm/emsdk/emsdk/upstream/emscripten/cache/sysroot/lib/wasm32-emscripten/libc++-noexcept.a /Users/xtt/wasm/emsdk/emsdk/upstream/emscripten/cache/sysroot/lib/wasm32-emscripten/libc++abi-noexcept.a /Users/xtt/wasm/emsdk/emsdk/upstream/emscripten/cache/sysroot/lib/wasm32-emscripten/libdlmalloc.a /Users/xtt/wasm/emsdk/emsdk/upstream/emscripten/cache/sysroot/lib/wasm32-emscripten/libc_rt_wasm.a /Users/xtt/wasm/emsdk/emsdk/upstream/emscripten/cache/sysroot/lib/wasm32-emscripten/libsockets.a -mllvm -combiner-global-alias-analysis=false -mllvm -enable-emscripten-sjlj -mllvm -disable-lsr --allow-undefined --strip-debug --export main --export emscripten_stack_get_end --export emscripten_stack_get_free --export emscripten_stack_init --export stackSave --export stackRestore --export stackAlloc --export __wasm_call_ctors --export fflush --export __errno_location --export malloc --export free --export _get_tzname --export _get_daylight --export _get_timezone --export memset --export memalign --export-table -z stack-size=5242880 --initial-memory=16777216 --no-entry --max-memory=16777216 --global-base=1024' failed (1)
make: *** [ffmpeg_g] Error 1

根据错误提示,可以得知是 make ffmpeg 的时候,初始化内存太小了。于是我建议它修改初始化内存。

然后他直接执行下面的命令。

make --initial-memory=20188032 --max-memory=20777216

又提示了错误,说 make 的参数不对。

我根据第一个错误,帮他百度了一下,得知需要修改emsdk/upstream/emscripten/src 目录里面的 settings.js。

注意,这个 settings.js 文件,默认是一个只读文件。修改时,要加上 sudo。要不然就提示:E45: ‘readonly’ option is set (add ! to override)

sudo vi settings.js

找到里面的 var INITIAL_MEMORY,修改为 var INITIAL_MEMORY = 20777216;

谁知道,这以修改,make 时又爆出了异常。

emcc: error: INITIAL_MEMORY must be a multiple of WebAssembly page size (64KiB), was 20777216

这个异常的意思时说,INITIAL_MEMORY 参数必须是 64KiB 的倍数。因此,给它改为 var INITIAL_MEMORY = 33554432; 就可以正常编译了。

这位网友非常认真,学习编程也学的非常刻苦。未来一定是一个大牛人物,为他点赞!

业余草公众号

最后,欢迎关注我的个人微信公众号:业余草(yyucao)!可加作者微信号1:xmtxtt(5000人已满),微信号2:xttblog(5000人已满),微信号3:codedq(超3800)。备注:“1”,添加博主微信拉你进微信群。备注错误不会同意好友申请。再次感谢您的关注!后续有精彩内容会第一时间发给您!原创文章投稿请发送至532009913@qq.com邮箱。商务合作也可添加作者微信进行联系!

本文原文出处:业余草: » emcc: error: INITIAL_MEMORY must be a multiple of WebAssembly page size (64KiB), was 20777216