Troubleshooting
The messages below are quoted as the command prints them, so you can search this page for the line you got. In the default JSON mode a message that stops the run arrives as an error record on stdout. Progress and log lines go to stderr as JSON.
The full output of the last run, setup and failed runs included, is kept in the cache volume and replaced on every run:
docker run --rm \
-v mql-compiler-cache:/c \
busybox cat "/c/uid-$(id -u)/logs/last-run.log"
Docker
docker is not installed: Docker’s CLI isn’t on yourPATH.cannot talk to Dockerfrom the installer, or exit status125from the command: the daemon is down, your account isn’t in thedockergroup, or the image couldn’t be pulled. On an ARM machine the pull fails because there’s no ARM image.- Permission errors on every file on an SELinux host: the mounts carry no
:zlabel. Relabel the source directories, or run the image by hand with:zon the mounts.
Setup and the toolchain
toolchain setup failed: the installer download or its signature check failed, the install didn’t finish in time or finished without a MetaEditor, or the terminal didn’t unpack its standard library. The stderr log lines right before it say which. Retry. A custom installer URL must point at a MetaQuotes-signed setup file.installer did not finish(log line): a platform’s installer ran longer thanMQL_COMPILER_INSTALL_TIMEOUTseconds (600 by default) and got stopped. The installer downloads the terminal itself and then starts it, so this is a slow connection or a terminal stuck on a dialog. Runmql-compiler --setupagain, with a biggerMQL_COMPILER_INSTALL_TIMEOUTon a slow link.the terminal did not unpack its standard library(log line): the terminal started but never wrote its headers within two minutes. Runmql-compiler --setupagain. If it keeps failing, runmql-compiler --update.toolchain update failed:--updatecouldn’t reinstall, and the previous toolchain is back in place. The log lines before it say why.... belongs to UID N, not M: the cache was written by another UID: that cache directory inside the volume was created by a different user ID. Run as the original user, or give yourself your ownMQL_COMPILER_VOLUME.another mql-compiler run is using this cache, waiting for it to finish: not an error. Another run for the same user is going, and this one starts when it ends.
Seccomp and Linux 7.0
wine: socket : Function not implemented, orcreating the Wine prefix did not finish, on Linux 7.0 (Ubuntu 26.04): Docker’s default seccomp filter refuses theuserfaultfdcall Wine needs. The command passes its own profile, so this means it ran without one: an old install (run the installer again), or adocker runby hand without--security-opt seccomp=pointing at a copy ofseccomp/wine.json.no such seccomp profile:MQL_COMPILER_SECCOMP, or the profile the installer wrote, points at a file that’s gone. Run the installer again.
Paths and options
no such file or folder: the path doesn’t exist. Relative paths start at the current directory.refusing to mount / into the container:mql-compilerran with no path from/, a loose file sits directly in/, or a terminal option points at/. Name the directories or files to compile.not an .mq4 or .mq5 file: you named a header or some other file directly. Name the.mq4or.mq5that includes it.no .mq4 or .mq5 files found: the directories you gave hold no sources. Symlinked sources inside a directory are skipped.no such include folderor-I needs a folder: an-Ipath is missing or doesn’t exist.no such terminal folder,no metaeditor64.exe in the --mt5-terminal folder(ormetaeditor.exefor MT4), orno unpacked standard library: the--mt4-terminal/--mt5-terminaldirectory is wrong, or the terminal was never started, so it never unpacked its headers. Start the terminal once, then run again. See bring your own terminal.unknown optionorunknown format: checkmql-compiler --help.--formattakesjson,textorgnu.
Compile results
file '...' not foundon a custom header: the source isn’t under theMQL4/MQL5directory whoseIncludeholds that header, or the include climbs out of the mounted directory. See how your tree should look.- An error inside a standard header: it’s reported at the header’s path in the toolchain (
/cache/uid-<UID>/wine/drive_c/..., inside the cache volume). It usually means your code broke something the header relies on, such as a macro named like a standard class. Fix your code, not the toolchain. MetaEditor wrote no result(afailedrecord witherrors: nulland alogfield): MetaEditor crashed or never ran for that file.logholds whatever it wrote. Run again, and runmql-compiler --updateif it keeps happening.