Warum nicht Win32 :: ODBC die ODBC.DLL unter Perl 5.10 und Cygwin finden?
Frage
Ich versuche, Perl ODBC zu verwenden, um einen Microsoft SQL Server zu verbinden. Mein Problem ist, dass Perl 5.10.0 ein Problem mit den Win32-ODBC-Treiber verwenden.
Wenn ich ein Perl-Shell ausführen, und führen diese eine Zeile, erhalte ich Fehler.
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.
Ich habe überprüft, dass die DLL-Datei vorhanden ist.
Ich habe die Cygwin-Pakete installiert:
- perl (5.10.0-5)
- perl-libwin32 (0,28-2)
Lösung
Dies scheint ein bekanntes Problem zu sein . Besorgen Sie sich die libiodbc Quelle gelten die folgenden Patch, bauen und installieren:
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: die Cygwin Leute haben eine TODO für diese Ausgabe , aber es ist nun einige Monate alt. Im Fall, dass zu lang warten, können Sie gefälschte es in der Zwischenzeit:
#! /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
Andere Tipps
Ich habe überprüft, dass die DLL-Datei vorhanden ist.
Sie meinen, dass /usr/lib/perl5/vendor_perl/5.10/i686-cygwin/auto/Win32/ODBC/ODBC.dll
existiert? Wenn ja, haben Sie gelesen haben und die Erlaubnis ausführen?
Es gibt einen Kommentar direkt über /usr/lib/perl5/5.10/i686-cygwin/DynaLoader.pm Linie 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.
Also, es ist etwas falsch mit Ihrer Installation scheint. Sie könnten versuchen, Win32 :: ODBC Neuinstallation mit:
$ cpan Win32::ODBC