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.