Dear all,<br><br>Thanks to everyone, now I'm pretty close to my goal (porting a program to ECL and build standalone executable under windows). Here are some small issues I found (issue 1is fixed, and issue 2 is skipped):<br><br>1. see https://gitlab.com/embeddable-common-lisp/ecl/blob/develop/src/cmp/cmpmain.lsp#L158<br><br> (format f "/DEBUGTYPE:CV /OUT:~A ~A ~{~&\"~A\"~}"<br><br>There are two issues:<br>a. /DEBUGTYPE:CV is deprecated<br>b. the argument to /OUT: is NOT quoted, so if the output-name contains whitespaces (it's very common), msvc will consider it several tokens instead of a single filename. I changed it to /OUT:\"~A\" \"~A\" ... and it worked.<br><br>2. in the same file, function link-cc:<br><br>#+msvc<br>(defun linker-cc (o-pathname object-files &key<br>                  (type :program)<br>                  (ld-flags (split-program-options *ld-flags*)))<br>  (safe-run-program<br>   *ld*<br>   `(,(concatenate 'string "-Fe" (brief-namestring o-pathname))<br>     ,@object-files<br>     ,@(split-program-options *ld-rpath*)<br>     ,@(split-program-options *user-ld-flags*)<br>     ,@ld-flags))<br>  (embed-manifest-file o-pathname type)<br>  (delete-msvc-generated-files o-pathname))<br><br>The code looks promising, but unfortunately, if you're building an executable with asdf:make-build (:type :program), an error would occur, saying that "output filename matches input file".<br><br>For example, if the system is called "example", compiling the system would create example.lib, then building the executable would create example.exe. However, when creating {filename}.exe, msvc would first create {filename}.exp and {filename}.lib, example.lib is both an input file and an output file.<br><br>I manually copied the argument to a link_program.bat file, changed the output name to example1.exe and it worked. However, it would be nice if anyone could fix this in ECL because it looks non-trivial for me because o-pathname has to be consistent with other calls to msvc (linking will be followed by a call to mt.exe to add manifest file).<br><br>3. The above tricks is enough to get example.exe working. However, when I try with my target project, the executable (say, real-project.exe) cannot start, saything about packages likes ASDF:OPERATE are referenced but not created.<br><br>I've searched the error message in the codebase, and here is the result:<br>https://gitlab.com/embeddable-common-lisp/ecl/blob/develop/src/c/load.d#L174<br>and<br>https://gitlab.com/embeddable-common-lisp/ecl/blob/develop/src/c/read.d#L2451<br><br>That is:<br>"The packages~&  ~A~&were referenced in compiled file~&  ~A~&but have not been created",<br><br>Looking at the parameters to the linker, I realized that asdf.lib is NOT linked against. How can I link it?<br><br>4. Another question, which is not urgent, is how to bundle encodings? I got the following error:<br><br>"Unable to find mapping file GBK for encoding SYS:ENCODINGS;GBK.BIN"<br><br>See: https://gitlab.com/embeddable-common-lisp/ecl/blob/develop/src/lsp/iolib.lsp#L309<br><br>The problem is that in packages/encodings, there is no gbk.bin. The closest one is windows-cp936, but I don't know how to "tell" ECL that GBK is an alias of cp936.<br><br>BTW: GBK is automatically detected in function "with-output-to-string". Is there a way to change the default encoding?<br><br>Thanks!<br><br>- Rujia<br><br>