2009-05-05 19 views
4

私はPerl ODBCを使ってMicrosoft SQLサーバーに接続しようとしています。私の問題は、Perl 5.10.0がWin32 ODBCドライバを使って問題を抱えていることです。Win32 :: ODBCがPerl 5.10とCygwinでODBC.dllを見つけられないのはなぜですか?

Perlシェルを実行してこの1行を実行すると、エラーが発生します。

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. 

私はdllファイルが存在することを確認しました。

私はCygwinのパッケージをインストールした:

  • perlの(5.10.0-5)
  • のperl-libwin32(0.28から2)

答えて

2

これはknown issueように見えます。 libiodbc sourceをつかみ、構築、およびインストールし、次のパッチを適用します。

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の人々have a TODO for this issueを、それがここ数ヶ月です。待ち時間が長すぎる場合は、その間に偽装することができます:

#! /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 
+0

ありがとうございました。 Cygwin Perlのインストールが終了し、代わりにActivePerlを使用したことが判明しました。私はそれに対応するためにCygwinのパスを更新しました。 –

0

私がいることを確認しましたdllファイルは存在します。

/usr/lib/perl5/vendor_perl/5.10/i686-cygwin/auto/Win32/ODBC/ODBC.dllは存在しますか?もしそうなら、あなたは読み込みと実行の許可を持っていますか?

だけ/usr/lib/perl5/5.10/i686-cygwin/DynaLoader.pm線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. 

だから、何かが、インストールに問題があるようです。あなたは、Win32の再インストールを試みることができる::とODBC:

$ cpan Win32::ODBC 
関連する問題