A portable way to build the filename of a module.
The platform-specific prefix and suffix are added to the filename, if needed, and the result is added to the directory, using the correct separator character.
The directory should specify the directory where the module can be found. It can be null or an empty string to indicate that the module is in a standard platform-specific directory, though this is not recommended since the wrong module may be found.
For example, calling build_path on a Linux system with a
directory of `/lib` and a
module_name of "mylibrary" will return `/lib/libmylibrary.so`. On a Windows system, using `\Windows` as the directory it will return
the directory where the module is. This can be null or the empty string to indicate that the standard platform-specific directories will be used, though that is not recommended
the name of the module
the complete path of the module, including the standard library prefix and suffix. This should be freed when no longer needed