You are looking at historical revision 29533 of this page. It may differ significantly from its current revision.

The behavior of dynamic link libraries (DLLs) on Cygwin is somewhat schizoid, because Cygwin programs are loaded by the regular Windows program loader. When Windows loads a DLL that a program executable requires, it looks on PATH, but when a Cygwin program decides to load a DLL itself using the Unix-compatible dlopen() call, it looks on LD_LIBRARY_PATH as Unix systems do. This is fundamental and unchangeable, and usually doesn't cause a problem. However, with csi, Chicken's interpreter, it does.

The standard units like srfi-1 and posix are stored in the standard Chicken DLL, which on Cygwin is called cygchicken-0.dll. This file is loaded by Windows when csi.exe starts up. However, it also needs to be loaded again when you say (use srfi-1) in order to use SRFI 1 procedures in the REPL. Unfortunately, cygchicken-0.dll is not on LD_LIBRARY_PATH at all; it's in /usr/local/bin, which is where Windows needs it to be.

I've experimented with a few ways to solve this. Creating a symbolic link, hard link, or copy of /usr/local/bin/cygchicken-0.dll in /usr/local/lib or /usr/lib does not work. You can set LD_LIBRARY_PATH permanently to /usr/local/bin, but that may cause funky problems with other Cygwin programs. So I recommend adding this line to your .bash_profile or .bash_aliases file:

 alias csi='LD_LIBRARY_PATH=/usr/local/bin csi'

Doing so will set $LD_LIBRARY_PATH if and only if you are running csi.