These crashes are NOT due to missing ddls - they are caused by an inconsistent compliment of dlls.
When an application does not specify its dll dependencies, the dll loader checks whether calls issued by it can be satisfied by an already memory resident dll (to save memory by not having to load a new copy of a dll). If the already loaded dll is not the same version as that used during linking this application the result is unpredictable. This was a major problem with the early versions of windows.
So when an application hasn't specified its dll dependencies it is pot luck whether it will crash or not on another computer and hence cannot be considered as truly portable.
Even if it does run, it should not be assumed that it will produce the same results as running on the computer where it was linked.
This is true for applications on many OS's and consequently a method has been devised to solve this problem - it is called a manifest. When linking an application, generation of a manifest may be selected.
On Windows the manifest may exist as a separate file in the same directory as the executable (app_name.exe.manifest) or may be incorporated into the executable.
The ddl loader then uses the info in the manifest to ensure that exactly the same version of a dll is loaded or an error is issued. The application is then running the exact same code as on the original host. For example in Windows, earlier versions of ddls are under the \Windows\winsxs directory to provide backward compatibility.
The manifest is missing for the Cura application, so which dlls are loaded on a particular PC depend on the current OS version, what applications are running using a manifest (resulting in a memory resident dll with the specific version for that app), order of running etc etc ... ie unpredictable!!!!.
Some combinations run (how correctly cannot be specified), others crash.