Just installed the 64 bit cygwin and was installing ffi with gem and ran into the following problem...
gcc -shared -o ffi_c.so AbstractMemory.o ArrayType.o Buffer.o Call.o ClosurePool.o DataConverter.o DynamicLibrary.o ffi.o Function.o FunctionInfo.o LastError.o LongDouble.o MappedType.o MemoryPointer.o MethodHandle.o Platform.o Pointer.o Struct.o StructByReference.o StructByValue.o StructLayout.o Thread.o Type.o Types.o Variadic.o -L. -L/usr/lib -L. -Wl,--export-all-symbols -Wl,--enable-auto-image-base,--enable-auto-import "/usr/lib/ruby/gems/1.9.1/gems/ffi-1.9.0/ext/ffi_c/libffi-x86_64-cygwin"/.libs/libffi_convenience.a -lruby191 -lpthread -lrt -ldl -lcrypt
/usr/lib/ruby/gems/1.9.1/gems/ffi-1.9.0/ext/ffi_c/Call.c:285: undefined reference to `ffi_call'
/usr/lib/ruby/gems/1.9.1/gems/ffi-1.9.0/ext/ffi_c/Call.c:285:(.text+0x94): relocation truncated to fit: R_X86_64_PC32 against undefined symbol `ffi_call'
/usr/lib/ruby/gems/1.9.1/gems/ffi-1.9.0/ext/ffi_c/Call.c:369: undefined reference to `ffi_call'
/usr/lib/ruby/gems/1.9.1/gems/ffi-1.9.0/ext/ffi_c/Call.c:369:(.text+0xa29): relocation truncated to fit: R_X86_64_PC32 against undefined symbol `ffi_call'
/usr/lib/ruby/gems/1.9.1/gems/ffi-1.9.0/ext/ffi_c/Variadic.c:242: undefined reference to `ffi_call'
/usr/lib/ruby/gems/1.9.1/gems/ffi-1.9.0/ext/ffi_c/Variadic.c:242:(.text+0x36d): relocation truncated to fit: R_X86_64_PC32 against undefined symbol `ffi_call'
/usr/lib/ruby/gems/1.9.1/gems/ffi-1.9.0/ext/ffi_c/libffi-x86_64-cygwin/.libs/libffi_convenience.a(prep_cif.o): In function `ffi_prep_cif':
/usr/lib/ruby/gems/1.9.1/gems/ffi-1.9.0/ext/ffi_c/libffi/src/prep_cif.c:162: undefined reference to `ffi_prep_cif_machdep'
/usr/lib/ruby/gems/1.9.1/gems/ffi-1.9.0/ext/ffi_c/libffi/src/prep_cif.c:162:(.text+0x272): relocation truncated to fit: R_X86_64_PC32 against undefined symbol `ffi_prep_cif_machdep'
/usr/lib/ruby/gems/1.9.1/gems/ffi-1.9.0/ext/ffi_c/libffi-x86_64-cygwin/.libs/libffi_convenience.a(prep_cif.o): In function `ffi_prep_closure':
/usr/lib/ruby/gems/1.9.1/gems/ffi-1.9.0/ext/ffi_c/libffi/src/prep_cif.c:174: undefined reference to `ffi_prep_closure_loc'
/usr/lib/ruby/gems/1.9.1/gems/ffi-1.9.0/ext/ffi_c/libffi/src/prep_cif.c:174:(.text+0x2b7): relocation truncated to fit: R_X86_64_PC32 against undefined symbol `ffi_prep_closure_loc'
I suspect the ffi_call symbol would be defined in "/usr/lib/ruby/gems/1.9.1/gems/ffi-1.9.0/ext/ffi_c/libffi-x86_64-cygwin"/.libs/libffi_convenience.a.
Looks like some sort of shim has fallen out. Any suggestions?
make -C "/usr/lib/ruby/gems/1.9.1/gems/ffi-1.9.0/ext/ffi_c/libffi-x86_64-cygwin"
make[1]: Entering directory `/usr/lib/ruby/gems/1.9.1/gems/ffi-1.9.0/ext/ffi_c/libffi-x86_64-cygwin'
make "AR_FLAGS=" "CC_FOR_BUILD=" "CFLAGS=-Wall -fexceptions" "CXXFLAGS=" "CFLAGS_FOR_BUILD=" "CFLAGS_FOR_TARGET=" "INSTALL=/usr/bin/install -c" "INSTALL_DATA=/usr/bin/install -c -m 644" "INSTALL_PROGRAM=/usr/bin/install -c" "INSTALL_SCRIPT=/usr/bin/install -c" "JC1FLAGS=" "LDFLAGS=" "LIBCFLAGS=" "LIBCFLAGS_FOR_TARGET=" "MAKE=make" "MAKEINFO=/bin/sh /usr/lib/ruby/gems/1.9.1/gems/ffi-1.9.0/ext/ffi_c/libffi/missing --run makeinfo " "PICFLAG=" "PICFLAG_FOR_TARGET=" "RUNTESTFLAGS=" "SHELL=/bin/sh" "exec_prefix=/usr/local" "infodir=/usr/local/share/info" "libdir=/usr/local/lib" "mandir=/usr/local/share/man" "prefix=/usr/local" "AR=ar" "AS=as" "CC=gcc" "CXX=g++" "LD=/usr/x86_64-pc-cygwin/bin/ld.exe" "NM=/usr/bin/nm -B" "RANLIB=ranlib" "DESTDIR=" all-recursive
make[2]: Entering directory `/usr/lib/ruby/gems/1.9.1/gems/ffi-1.9.0/ext/ffi_c/libffi-x86_64-cygwin'
Making all in include
make[3]: Entering directory `/usr/lib/ruby/gems/1.9.1/gems/ffi-1.9.0/ext/ffi_c/libffi-x86_64-cygwin/include'
make[3]: Nothing to be done for `all'.
make[3]: Leaving directory `/usr/lib/ruby/gems/1.9.1/gems/ffi-1.9.0/ext/ffi_c/libffi-x86_64-cygwin/include'
Making all in testsuite
make[3]: Entering directory `/usr/lib/ruby/gems/1.9.1/gems/ffi-1.9.0/ext/ffi_c/libffi-x86_64-cygwin/testsuite'
make[3]: Nothing to be done for `all'.
make[3]: Leaving directory `/usr/lib/ruby/gems/1.9.1/gems/ffi-1.9.0/ext/ffi_c/libffi-x86_64-cygwin/testsuite'
Making all in man
make[3]: Entering directory `/usr/lib/ruby/gems/1.9.1/gems/ffi-1.9.0/ext/ffi_c/libffi-x86_64-cygwin/man'
make[3]: Nothing to be done for `all'.
make[3]: Leaving directory `/usr/lib/ruby/gems/1.9.1/gems/ffi-1.9.0/ext/ffi_c/libffi-x86_64-cygwin/man'
make[3]: Entering directory `/usr/lib/ruby/gems/1.9.1/gems/ffi-1.9.0/ext/ffi_c/libffi-x86_64-cygwin'
make[3]: Leaving directory `/usr/lib/ruby/gems/1.9.1/gems/ffi-1.9.0/ext/ffi_c/libffi-x86_64-cygwin'
make[2]: Leaving directory `/usr/lib/ruby/gems/1.9.1/gems/ffi-1.9.0/ext/ffi_c/libffi-x86_64-cygwin'
make[1]: Leaving directory `/usr/lib/ruby/gems/1.9.1/gems/ffi-1.9.0/ext/ffi_c/libffi-x86_64-cygwin'
gcc -I. -I/usr/include/ruby-1.9.1/x86_64-cygwin -I/usr/include/ruby-1.9.1/ruby/backward -I/usr/include/ruby-1.9.1 -I. -I"/usr/lib/ruby/gems/1.9.1/gems/ffi-1.9.0/ext/ffi_c/libffi-x86_64-cygwin"/include -DRUBY_EXTCONF_H=\"extconf.h\" -ggdb -O2 -pipe -fno-strict-aliasing -o AbstractMemory.o -c AbstractMemory.c
gcc -I. -I/usr/include/ruby-1.9.1/x86_64-cygwin -I/usr/include/ruby-1.9.1/ruby/backward -I/usr/include/ruby-1.9.1 -I. -I"/usr/lib/ruby/gems/1.9.1/gems/ffi-1.9.0/ext/ffi_c/libffi-x86_64-cygwin"/include -DRUBY_EXTCONF_H=\"extconf.h\" -ggdb -O2 -pipe -fno-strict-aliasing -o ArrayType.o -c ArrayType.c
gcc -I. -I/usr/include/ruby-1.9.1/x86_64-cygwin -I/usr/include/ruby-1.9.1/ruby/backward -I/usr/include/ruby-1.9.1 -I. -I"/usr/lib/ruby/gems/1.9.1/gems/ffi-1.9.0/ext/ffi_c/libffi-x86_64-cygwin"/include -DRUBY_EXTCONF_H=\"extconf.h\" -ggdb -O2 -pipe -fno-strict-aliasing -o Buffer.o -c Buffer.c
gcc -I. -I/usr/include/ruby-1.9.1/x86_64-cygwin -I/usr/include/ruby-1.9.1/ruby/backward -I/usr/include/ruby-1.9.1 -I. -I"/usr/lib/ruby/gems/1.9.1/gems/ffi-1.9.0/ext/ffi_c/libffi-x86_64-cygwin"/include -DRUBY_EXTCONF_H=\"extconf.h\" -ggdb -O2 -pipe -fno-strict-aliasing -o Call.o -c Call.c
gcc -I. -I/usr/include/ruby-1.9.1/x86_64-cygwin -I/usr/include/ruby-1.9.1/ruby/backward -I/usr/include/ruby-1.9.1 -I. -I"/usr/lib/ruby/gems/1.9.1/gems/ffi-1.9.0/ext/ffi_c/libffi-x86_64-cygwin"/include -DRUBY_EXTCONF_H=\"extconf.h\" -ggdb -O2 -pipe -fno-strict-aliasing -o ClosurePool.o -c ClosurePool.c
gcc -I. -I/usr/include/ruby-1.9.1/x86_64-cygwin -I/usr/include/ruby-1.9.1/ruby/backward -I/usr/include/ruby-1.9.1 -I. -I"/usr/lib/ruby/gems/1.9.1/gems/ffi-1.9.0/ext/ffi_c/libffi-x86_64-cygwin"/include -DRUBY_EXTCONF_H=\"extconf.h\" -ggdb -O2 -pipe -fno-strict-aliasing -o DataConverter.o -c DataConverter.c
gcc -I. -I/usr/include/ruby-1.9.1/x86_64-cygwin -I/usr/include/ruby-1.9.1/ruby/backward -I/usr/include/ruby-1.9.1 -I. -I"/usr/lib/ruby/gems/1.9.1/gems/ffi-1.9.0/ext/ffi_c/libffi-x86_64-cygwin"/include -DRUBY_EXTCONF_H=\"extconf.h\" -ggdb -O2 -pipe -fno-strict-aliasing -o DynamicLibrary.o -c DynamicLibrary.c
gcc -I. -I/usr/include/ruby-1.9.1/x86_64-cygwin -I/usr/include/ruby-1.9.1/ruby/backward -I/usr/include/ruby-1.9.1 -I. -I"/usr/lib/ruby/gems/1.9.1/gems/ffi-1.9.0/ext/ffi_c/libffi-x86_64-cygwin"/include -DRUBY_EXTCONF_H=\"extconf.h\" -ggdb -O2 -pipe -fno-strict-aliasing -o ffi.o -c ffi.c
gcc -I. -I/usr/include/ruby-1.9.1/x86_64-cygwin -I/usr/include/ruby-1.9.1/ruby/backward -I/usr/include/ruby-1.9.1 -I. -I"/usr/lib/ruby/gems/1.9.1/gems/ffi-1.9.0/ext/ffi_c/libffi-x86_64-cygwin"/include -DRUBY_EXTCONF_H=\"extconf.h\" -ggdb -O2 -pipe -fno-strict-aliasing -o Function.o -c Function.c
Function.c: In function ‘callback_invoke’:
Function.c:470:9: warning: passing argument 1 of ‘rb_thread_call_with_gvl’ from incompatible pointer type [enabled by default]
rb_thread_call_with_gvl(callback_with_gvl, &cb);
^
Function.c:93:14: note: expected ‘void * (*)(void *)’ but argument is of type ‘VALUE (*)(void *)’
extern void *rb_thread_call_with_gvl(void *(*func)(void *), void *data1);
^
gcc -I. -I/usr/include/ruby-1.9.1/x86_64-cygwin -I/usr/include/ruby-1.9.1/ruby/backward -I/usr/include/ruby-1.9.1 -I. -I"/usr/lib/ruby/gems/1.9.1/gems/ffi-1.9.0/ext/ffi_c/libffi-x86_64-cygwin"/include -DRUBY_EXTCONF_H=\"extconf.h\" -ggdb -O2 -pipe -fno-strict-aliasing -o FunctionInfo.o -c FunctionInfo.c
gcc -I. -I/usr/include/ruby-1.9.1/x86_64-cygwin -I/usr/include/ruby-1.9.1/ruby/backward -I/usr/include/ruby-1.9.1 -I. -I"/usr/lib/ruby/gems/1.9.1/gems/ffi-1.9.0/ext/ffi_c/libffi-x86_64-cygwin"/include -DRUBY_EXTCONF_H=\"extconf.h\" -ggdb -O2 -pipe -fno-strict-aliasing -o LastError.o -c LastError.c
gcc -I. -I/usr/include/ruby-1.9.1/x86_64-cygwin -I/usr/include/ruby-1.9.1/ruby/backward -I/usr/include/ruby-1.9.1 -I. -I"/usr/lib/ruby/gems/1.9.1/gems/ffi-1.9.0/ext/ffi_c/libffi-x86_64-cygwin"/include -DRUBY_EXTCONF_H=\"extconf.h\" -ggdb -O2 -pipe -fno-strict-aliasing -o LongDouble.o -c LongDouble.c
gcc -I. -I/usr/include/ruby-1.9.1/x86_64-cygwin -I/usr/include/ruby-1.9.1/ruby/backward -I/usr/include/ruby-1.9.1 -I. -I"/usr/lib/ruby/gems/1.9.1/gems/ffi-1.9.0/ext/ffi_c/libffi-x86_64-cygwin"/include -DRUBY_EXTCONF_H=\"extconf.h\" -ggdb -O2 -pipe -fno-strict-aliasing -o MappedType.o -c MappedType.c
gcc -I. -I/usr/include/ruby-1.9.1/x86_64-cygwin -I/usr/include/ruby-1.9.1/ruby/backward -I/usr/include/ruby-1.9.1 -I. -I"/usr/lib/ruby/gems/1.9.1/gems/ffi-1.9.0/ext/ffi_c/libffi-x86_64-cygwin"/include -DRUBY_EXTCONF_H=\"extconf.h\" -ggdb -O2 -pipe -fno-strict-aliasing -o MemoryPointer.o -c MemoryPointer.c
gcc -I. -I/usr/include/ruby-1.9.1/x86_64-cygwin -I/usr/include/ruby-1.9.1/ruby/backward -I/usr/include/ruby-1.9.1 -I. -I"/usr/lib/ruby/gems/1.9.1/gems/ffi-1.9.0/ext/ffi_c/libffi-x86_64-cygwin"/include -DRUBY_EXTCONF_H=\"extconf.h\" -ggdb -O2 -pipe -fno-strict-aliasing -o MethodHandle.o -c MethodHandle.c
gcc -I. -I/usr/include/ruby-1.9.1/x86_64-cygwin -I/usr/include/ruby-1.9.1/ruby/backward -I/usr/include/ruby-1.9.1 -I. -I"/usr/lib/ruby/gems/1.9.1/gems/ffi-1.9.0/ext/ffi_c/libffi-x86_64-cygwin"/include -DRUBY_EXTCONF_H=\"extconf.h\" -ggdb -O2 -pipe -fno-strict-aliasing -o Platform.o -c Platform.c
gcc -I. -I/usr/include/ruby-1.9.1/x86_64-cygwin -I/usr/include/ruby-1.9.1/ruby/backward -I/usr/include/ruby-1.9.1 -I. -I"/usr/lib/ruby/gems/1.9.1/gems/ffi-1.9.0/ext/ffi_c/libffi-x86_64-cygwin"/include -DRUBY_EXTCONF_H=\"extconf.h\" -ggdb -O2 -pipe -fno-strict-aliasing -o Pointer.o -c Pointer.c
gcc -I. -I/usr/include/ruby-1.9.1/x86_64-cygwin -I/usr/include/ruby-1.9.1/ruby/backward -I/usr/include/ruby-1.9.1 -I. -I"/usr/lib/ruby/gems/1.9.1/gems/ffi-1.9.0/ext/ffi_c/libffi-x86_64-cygwin"/include -DRUBY_EXTCONF_H=\"extconf.h\" -ggdb -O2 -pipe -fno-strict-aliasing -o Struct.o -c Struct.c
gcc -I. -I/usr/include/ruby-1.9.1/x86_64-cygwin -I/usr/include/ruby-1.9.1/ruby/backward -I/usr/include/ruby-1.9.1 -I. -I"/usr/lib/ruby/gems/1.9.1/gems/ffi-1.9.0/ext/ffi_c/libffi-x86_64-cygwin"/include -DRUBY_EXTCONF_H=\"extconf.h\" -ggdb -O2 -pipe -fno-strict-aliasing -o StructByReference.o -c StructByReference.c
gcc -I. -I/usr/include/ruby-1.9.1/x86_64-cygwin -I/usr/include/ruby-1.9.1/ruby/backward -I/usr/include/ruby-1.9.1 -I. -I"/usr/lib/ruby/gems/1.9.1/gems/ffi-1.9.0/ext/ffi_c/libffi-x86_64-cygwin"/include -DRUBY_EXTCONF_H=\"extconf.h\" -ggdb -O2 -pipe -fno-strict-aliasing -o StructByValue.o -c StructByValue.c
gcc -I. -I/usr/include/ruby-1.9.1/x86_64-cygwin -I/usr/include/ruby-1.9.1/ruby/backward -I/usr/include/ruby-1.9.1 -I. -I"/usr/lib/ruby/gems/1.9.1/gems/ffi-1.9.0/ext/ffi_c/libffi-x86_64-cygwin"/include -DRUBY_EXTCONF_H=\"extconf.h\" -ggdb -O2 -pipe -fno-strict-aliasing -o StructLayout.o -c StructLayout.c
gcc -I. -I/usr/include/ruby-1.9.1/x86_64-cygwin -I/usr/include/ruby-1.9.1/ruby/backward -I/usr/include/ruby-1.9.1 -I. -I"/usr/lib/ruby/gems/1.9.1/gems/ffi-1.9.0/ext/ffi_c/libffi-x86_64-cygwin"/include -DRUBY_EXTCONF_H=\"extconf.h\" -ggdb -O2 -pipe -fno-strict-aliasing -o Thread.o -c Thread.c
gcc -I. -I/usr/include/ruby-1.9.1/x86_64-cygwin -I/usr/include/ruby-1.9.1/ruby/backward -I/usr/include/ruby-1.9.1 -I. -I"/usr/lib/ruby/gems/1.9.1/gems/ffi-1.9.0/ext/ffi_c/libffi-x86_64-cygwin"/include -DRUBY_EXTCONF_H=\"extconf.h\" -ggdb -O2 -pipe -fno-strict-aliasing -o Type.o -c Type.c
gcc -I. -I/usr/include/ruby-1.9.1/x86_64-cygwin -I/usr/include/ruby-1.9.1/ruby/backward -I/usr/include/ruby-1.9.1 -I. -I"/usr/lib/ruby/gems/1.9.1/gems/ffi-1.9.0/ext/ffi_c/libffi-x86_64-cygwin"/include -DRUBY_EXTCONF_H=\"extconf.h\" -ggdb -O2 -pipe -fno-strict-aliasing -o Types.o -c Types.c
gcc -I. -I/usr/include/ruby-1.9.1/x86_64-cygwin -I/usr/include/ruby-1.9.1/ruby/backward -I/usr/include/ruby-1.9.1 -I. -I"/usr/lib/ruby/gems/1.9.1/gems/ffi-1.9.0/ext/ffi_c/libffi-x86_64-cygwin"/include -DRUBY_EXTCONF_H=\"extconf.h\" -ggdb -O2 -pipe -fno-strict-aliasing -o Variadic.o -c Variadic.c
rm -f ffi_c.so
gcc -shared -o ffi_c.so AbstractMemory.o ArrayType.o Buffer.o Call.o ClosurePool.o DataConverter.o DynamicLibrary.o ffi.o Function.o FunctionInfo.o LastError.o LongDouble.o MappedType.o MemoryPointer.o MethodHandle.o Platform.o Pointer.o Struct.o StructByReference.o StructByValue.o StructLayout.o Thread.o Type.o Types.o Variadic.o -L. -L/usr/lib -L. -Wl,--export-all-symbols -Wl,--enable-auto-image-base,--enable-auto-import "/usr/lib/ruby/gems/1.9.1/gems/ffi-1.9.0/ext/ffi_c/libffi-x86_64-cygwin"/.libs/libffi_convenience.a -lruby191 -lpthread -lrt -ldl -lcrypt
Call.o: In function `call_blocking_function':
/usr/lib/ruby/gems/1.9.1/gems/ffi-1.9.0/ext/ffi_c/Call.c:285: undefined reference to `ffi_call'
/usr/lib/ruby/gems/1.9.1/gems/ffi-1.9.0/ext/ffi_c/Call.c:285:(.text+0x94): relocation truncated to fit: R_X86_64_PC32 against undefined symbol `ffi_call'
Call.o: In function `rbffi_CallFunction':
/usr/lib/ruby/gems/1.9.1/gems/ffi-1.9.0/ext/ffi_c/Call.c:369: undefined reference to `ffi_call'
/usr/lib/ruby/gems/1.9.1/gems/ffi-1.9.0/ext/ffi_c/Call.c:369:(.text+0xa29): relocation truncated to fit: R_X86_64_PC32 against undefined symbol `ffi_call'
Variadic.o: In function `variadic_invoke':
/usr/lib/ruby/gems/1.9.1/gems/ffi-1.9.0/ext/ffi_c/Variadic.c:242: undefined reference to `ffi_call'
/usr/lib/ruby/gems/1.9.1/gems/ffi-1.9.0/ext/ffi_c/Variadic.c:242:(.text+0x36d): relocation truncated to fit: R_X86_64_PC32 against undefined symbol `ffi_call'
/usr/lib/ruby/gems/1.9.1/gems/ffi-1.9.0/ext/ffi_c/libffi-x86_64-cygwin/.libs/libffi_convenience.a(prep_cif.o): In function `ffi_prep_cif':
/usr/lib/ruby/gems/1.9.1/gems/ffi-1.9.0/ext/ffi_c/libffi/src/prep_cif.c:162: undefined reference to `ffi_prep_cif_machdep'
/usr/lib/ruby/gems/1.9.1/gems/ffi-1.9.0/ext/ffi_c/libffi/src/prep_cif.c:162:(.text+0x272): relocation truncated to fit: R_X86_64_PC32 against undefined symbol `ffi_prep_cif_machdep'
/usr/lib/ruby/gems/1.9.1/gems/ffi-1.9.0/ext/ffi_c/libffi-x86_64-cygwin/.libs/libffi_convenience.a(prep_cif.o): In function `ffi_prep_closure':
/usr/lib/ruby/gems/1.9.1/gems/ffi-1.9.0/ext/ffi_c/libffi/src/prep_cif.c:174: undefined reference to `ffi_prep_closure_loc'
/usr/lib/ruby/gems/1.9.1/gems/ffi-1.9.0/ext/ffi_c/libffi/src/prep_cif.c:174:(.text+0x2b7): relocation truncated to fit: R_X86_64_PC32 against undefined symbol `ffi_prep_closure_loc'
collect2: error: ld returned 1 exit status
Makefile:214: recipe for target `ffi_c.so' failed
make: *** [ffi_c.so] Error 1