On Mon, Dec 21, 2009 at 1:26 PM, Luís Oliveira <span dir="ltr"><<a href="mailto:luismbo@gmail.com">luismbo@gmail.com</a>></span> wrote:<br><div class="gmail_quote"><blockquote class="gmail_quote" style="margin:0 0 0 .8ex;border-left:1px #ccc solid;padding-left:1ex;">
<div class="im">On Mon, Dec 21, 2009 at 8:55 PM, Elliott Slaughter<br>
<<a href="mailto:elliottslaughter@gmail.com">elliottslaughter@gmail.com</a>> wrote:<br>
> I'm believe I'm seeing this issue again, but none of my previous workarounds<br>
> seem to be working. I am using SBCL 1.0.29 on Windows XP, and when I save<br>
> and run an executable, I keep getting undefined alien errors. I have tried<br>
> both the :dont-save t hack that I initially suggested, and have tried<br>
> calling (close-foreign-library ...) on all of the open libraries before<br>
> saving the executable, and nothing helps.<br>
<br>
</div>Can you come up with a minimal test case? Something using e.g.<br>
libtest.dll would be nice.<font class="Apple-style-span" color="#888888"><font class="Apple-style-span" color="#000000"><br></font></font></blockquote></div><br>Sure.<div><br></div><div>For this test, I used SDL.dll from <a href="http://www.libsdl.org/release/SDL-1.2.14-win32.zip">http://www.libsdl.org/release/SDL-1.2.14-win32.zip</a> .</div>
<div><br></div><div><div>$ cat test.lisp</div><div>(asdf:oos 'asdf:load-op :cffi)</div><div>(cffi:define-foreign-library sdl</div><div>  (:windows "SDL.dll"))</div><div>(cffi:use-foreign-library sdl)</div><div>
(cffi:defcfun ("SDL_Linked_Version" SDL-Linked-Version) :pointer)</div><div>(defun main () (format t "does it work?~%") (quit))</div><div>(cffi:close-foreign-library 'sdl)</div><div>(save-lisp-and-die #+windows "main.exe" #-windows "main"</div>
<div>                   :toplevel #'main :executable t)</div><div><br></div><div><div>$ sbcl --load test.lisp</div><div>This is SBCL 1.0.29, an implementation of ANSI Common Lisp.</div><div>More information about SBCL is available at <<a href="http://www.sbcl.org/">http://www.sbcl.org/</a>>.</div>
<div><br></div><div>SBCL is free software, provided as is, with absolutely no warranty.</div><div>It is mostly in the public domain; some portions are provided under</div><div>BSD-style licenses.  See the CREDITS and COPYING files in the</div>
<div>distribution for more information.</div><div><br></div><div>This is experimental prerelease support for the Windows platform: use</div><div>at your own risk.  "Your Kitten of Death awaits!"</div><div>; loading system definition from C:\Bin\asdf\cffi\cffi.asd into</div>
<div>; #<PACKAGE "ASDF0"></div><div>; registering #<SYSTEM CFFI {23FFE3B9}> as CFFI</div><div>; loading system definition from C:\Bin\asdf\babel\babel.asd into</div><div>; #<PACKAGE "ASDF0"></div>
<div>; registering #<SYSTEM BABEL {242FC621}> as BABEL</div><div>; loading system definition from C:\Bin\asdf\alexandria\alexandria.asd into</div><div>; #<PACKAGE "ASDF0"></div><div>; registering #<SYSTEM :ALEXANDRIA {2449AB61}> as ALEXANDRIA</div>
<div>; loading system definition from</div><div>; C:\Bin\asdf\trivial-features\trivial-features.asd into #<PACKAGE "ASDF0"></div><div>; registering #<SYSTEM TRIVIAL-FEATURES {246A9BF9}> as TRIVIAL-FEATURES</div>
<div>WARNING:</div><div>   Saving cores with alien definitions referring to non-static foreign symbols</div><div>   is unsupported on this platform: references to such foreign symbols from the</div><div>   restarted core will not work. You may be able to work around this limitation</div>
<div>   by reloading all foreign definitions and code using them in the restarted</div><div>   core, but no guarantees.</div><div><br></div><div>Dynamic</div><div>   foreign symbols in this core: SDL_Linked_Version</div><div>
[undoing binding stack and other enclosing state... done]</div><div>[saving current Lisp image into main.exe:</div><div>writing 2888 bytes from the read-only space at 0x22000000</div><div>writing 1736 bytes from the static space at 0x22100000</div>
<div>writing 27688960 bytes from the dynamic space at 0x22300000</div><div>done]</div><div><br></div><div>$ ./main.exe</div><div><br></div><div>This is experimental prerelease support for the Windows platform: use</div><div>
at your own risk.  "Your Kitten of Death awaits!"</div><div><br></div><div>debugger invoked on a UNDEFINED-ALIEN-ERROR:</div><div>  Undefined alien: "SDL_Linked_Version"</div><div><br></div><div>Type HELP for debugger help, or (SB-EXT:QUIT) to exit from SBCL.</div>
<div><br></div><div>(no restarts: If you didn't do this on purpose, please report it as a bug.)</div><div><br></div><div>(SB-SYS:ENSURE-DYNAMIC-FOREIGN-SYMBOL-ADDRESS</div><div> "SDL_Linked_Version"</div><div>
 #<unused argument>)</div><div>0]</div><div>WARNING: Starting a select without a timeout while interrupts are disabled.</div><div>ba</div><div>0: (SB-SYS:ENSURE-DYNAMIC-FOREIGN-SYMBOL-ADDRESS</div><div>    "SDL_Linked_Version"</div>
<div>    #<unused argument>)</div><div>1: ((FLET SB-THREAD::WITH-RECURSIVE-SYSTEM-SPINLOCK-THUNK))</div><div>2: ((FLET #:WITHOUT-INTERRUPTS-BODY-[CALL-WITH-RECURSIVE-SYSTEM-SPINLOCK]196))</div><div>3: (SB-THREAD::CALL-WITH-RECURSIVE-SYSTEM-SPINLOCK</div>
<div>    #<CLOSURE (FLET SB-THREAD::WITH-RECURSIVE-SYSTEM-SPINLOCK-THUNK) {22FCDD}></div><div>    #<unavailable argument>)</div><div>4: (SB-SYS:UPDATE-LINKAGE-TABLE)</div><div>5: (SB-IMPL::FOREIGN-REINIT)</div>
<div>6: (SB-IMPL::REINIT)</div><div>7: ((LABELS SB-IMPL::RESTART-LISP))</div><div>8: ("foreign function: #x4120C4")</div><div>9: ("foreign function: #x40AF88")</div><div><br></div><div>0]</div><div>WARNING: Starting a select without a timeout while interrupts are disabled.</div>
<div>(quit)</div></div><br>-- <br>Elliott Slaughter<br><br>"Don't worry about what anybody else is going to do. The best way to predict the future is to invent it." - Alan Kay<br>
</div>