[elephant-devel] Windows/SBCL bug (and partial fix) when compiling DLLs

Elliott Slaughter elliottslaughter at gmail.com
Tue Dec 16 07:03:45 UTC 2008


Hi,
I just encountered a peculiarity with the perform method for
elephant-c-source files, which causes a clean build of elephant-unstable on
Windows/SBCL fails with the following

; $ gcc -mno-cygwin -mwindows -Wall -c -std=c99 "C:\Program
Files\asdf\elephant-unstable\src\memutil\libmemutil.c"
; $ dlltool -z "C:\Program
Files\asdf\elephant-unstable\src\memutil\libmemutil.def"
--export-all-symbols -e exports.o -l "C:\Program
Files\asdf\elephant-unstable\src\memutil\libmemutil.lib" "C:\Program
Files\asdf\elephant-unstable\src\memutil\libmemutil.o"
dlltool: Unable to open object file: C:\Program
Files\asdf\elephant-unstable\src\memutil\libmemutil.o

The first command assume the working directory is "C:\Program
Files\asdf\elephant-unstable\src\memutil\", which is done in ACL and
Lispworks by explicitly specifying a directory option with the run command.
But SBCL, and run-shell-command specifically, seem to have no option for
doing this. So the files end up in some unknown place (which most definitely
isn't the memutil directory).

I tried specifying the output files explicitly, which almost works, except
dlltool blows up when receiving a path with a space in it, even when it is
in quotes.

; $ gcc -mno-cygwin -mwindows -Wall -c -std=c99 "C:\Program
Files\asdf\elephant-unstable\src\memutil\libmemutil.c" -o "C:\Program
Files\asdf\elephant-unstable\src\memutil\libmemutil.o"
; $ dlltool -z "C:\Program
Files\asdf\elephant-unstable\src\memutil\libmemutil.def"
--export-all-symbols -e "C:\Program
Files\asdf\elephant-unstable\src\memutil\exports.o" -l "C:\Program
Files\asdf\elephant-unstable\src\memutil\libmemutil.lib" "C:\Program
Files\asdf\elephant-unstable\src\memutil\libmemutil.o"
Assembler messages:
Error: can't open Files\asdf\elephant-unstable\src\memutil\exports.o for
reading: No such file or directory
dlltool: as exited with status 1

So the attached patch fixes Windows/SBCL building the dlls from c source,
when the directory name contains no spaces. I would NOT suggest applying it
to the main repository, but I would like to get comments on how to fix this
problem, if any.

Thanks. Any suggestions would be appreciated.

P.S. I'm also curious why Windows requires 3 commands to build a dll in the
first place, whereas Linux uses only one.

-- 
Elliott Slaughter

"Any road followed precisely to its end leads precisely nowhere." - Frank
Herbert
-------------- next part --------------
An HTML attachment was scrubbed...
URL: <https://mailman.common-lisp.net/pipermail/elephant-devel/attachments/20081215/bbd28f2e/attachment.html>
-------------- next part --------------
A non-text attachment was scrubbed...
Name: elephant_asd_-partial-fix-for-windows_sbcl_-apply-with-care_.dpatch
Type: application/octet-stream
Size: 20604 bytes
Desc: not available
URL: <https://mailman.common-lisp.net/pipermail/elephant-devel/attachments/20081215/bbd28f2e/attachment.obj>


More information about the elephant-devel mailing list