Why does Win32 :: ODBC not find ODBC.dll under Perl 5.10 and Cygwin?

I am trying to use Perl ODBC to connect to a Microsoft SQL server. My problem is that Perl 5.10.0 had a problem using the Win32 ODBC driver.

If I run the Perl shell and run this one line, I get errors.

use Win32::ODBC; Can't load '/usr/lib/perl5/vendor_perl/5.10/i686-cygwin/auto/Win32/ODBC/ODBC.dll' for module Win32::ODBC: No such file or directory at /usr/lib/perl5/5.10/i686-cygwin/DynaLoader.pm line 201. 

I checked that the dll file exists.

I installed Cygwin packages:

  • perl (5.10.0-5)
  • perl-libwin32 (0.28-2)
+4
source share
2 answers

This is apparently a known issue . Take the libiodbc source , apply the following patch, build and install:

 diff -ub libiodbc-3.52.6/include/iodbcunix.h.orig --- libiodbc-3.52.6/include/iodbcunix.h.orig 2006-01-26 09:50:59.000000000 +0000 +++ libiodbc-3.52.6/include/iodbcunix.h 2007-12-24 19:33:57.859375000 +0000 @@ -124,6 +124,7 @@ #if defined (OBSOLETE_WINDOWS_TYPES) typedef unsigned char BYTE; #endif +#ifndef WIN32 typedef unsigned short WORD; typedef unsigned int DWORD; typedef char * LPSTR; @@ -131,6 +132,7 @@ typedef wchar_t * LPWSTR; typedef const wchar_t * LPCWSTR; typedef DWORD * LPDWORD; +#endif #if !defined(BOOL) && !defined(_OBJC_OBJC_H_) typedef int BOOL; 

UPDATE: Cygwin people have TODO for this problem , but it's been several months now. In case you wait too long, you can fake it in the meantime:

 #! /bin/bash # run from the libiodbc build directory gcc -shared -o cygiodbc-2.dll \ -Wl,--out-implib=libcygiodbc-2.dll.a \ -Wl,--export-all-symbols \ -Wl,--enable-auto-import \ -Wl,--whole-archive iodbc/.libs/libiodbc.a \ -Wl,--no-whole-archive gcc -shared -o cygiodbcinst-2.dll \ -Wl,--out-implib=libcygiodbcinst-2.dll.a \ -Wl,--export-all-symbols \ -Wl,--enable-auto-import \ -Wl,--whole-archive iodbcinst/.libs/libiodbcinst.a \ -Wl,--no-whole-archive cp cygiodbc{,inst}-2.dll /bin 
+2
source

I checked that the dll file exists.

Do you mean that /usr/lib/perl5/vendor_perl/5.10/i686-cygwin/auto/Win32/ODBC/ODBC.dll exists? If so, do you have permission to read and execute?

Here is a comment just above / usr / lib / perl 5 / 5.10 / i686-cygwin / DynaLoader.pm line 201:

 # Many dynamic extension loading problems will appear to come from # this section of code: XYZ failed at line 123 of DynaLoader.pm. # Often these errors are actually occurring in the initialisation # C code of the extension XS file. Perl reports the error as being # in this perl code simply because this was the last perl code # it executed. 

So, something is wrong with your installation. You can try reinstalling Win32 :: ODBC with:

 $ cpan Win32::ODBC 
0
source

All Articles