Dear all,

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):

1. see 
https://gitlab.com/embeddable-common-lisp/ecl/blob/develop/src/cmp/cmpmain.lsp#L158

 (format f "/DEBUGTYPE:CV /OUT:~A ~A ~{~&\"~A\"~}"

There are two issues:
a. /DEBUGTYPE:CV is deprecated
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.

2. in the same file, function link-cc:

#+msvc
(defun linker-cc (o-pathname object-files &key
                  (type :program)
                  (ld-flags (split-program-options *ld-flags*)))
  (safe-run-program
   *ld*
   `(,(concatenate 'string "-Fe" (brief-namestring o-pathname))
     ,@object-files
     ,@(split-program-options *ld-rpath*)
     ,@(split-program-options *user-ld-flags*)
     ,@ld-flags))
  (embed-manifest-file o-pathname type)
  (delete-msvc-generated-files o-pathname))

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".

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.

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).

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.

I've searched the error message in the codebase, and here is the result:
https://gitlab.com/embeddable-common-lisp/ecl/blob/develop/src/c/load.d#L174
and
https://gitlab.com/embeddable-common-lisp/ecl/blob/develop/src/c/read.d#L2451

That is:
"The packages~&  ~A~&were referenced in compiled file~&  ~A~&but have not been 
created",

Looking at the parameters to the linker, I realized that asdf.lib is NOT linked 
against. How can I link it?

4. Another question, which is not urgent, is how to bundle encodings? I got the 
following error:

"Unable to find mapping file GBK for encoding SYS:ENCODINGS;GBK.BIN"

See: 
https://gitlab.com/embeddable-common-lisp/ecl/blob/develop/src/lsp/iolib.lsp#L309

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.

BTW: GBK is automatically detected in function "with-output-to-string". Is 
there a way to change the default encoding?

Thanks!

- Rujia
------------------------------------------------------------------------------
Monitor 25 network devices or servers for free with OpManager!
OpManager is web-based network management software that monitors 
network devices and physical & virtual servers, alerts via email & sms 
for fault. Monitor 25 devices for free with no restriction. Download now
http://ad.doubleclick.net/ddm/clk/292181274;119417398;o
_______________________________________________
Ecls-list mailing list
Ecls-list@lists.sourceforge.net
https://lists.sourceforge.net/lists/listinfo/ecls-list

Reply via email to