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