![](/img/trans.png)
[英]Good alternatives to Cygwin? - Cygwin doesn't support natively support Win32 apps
[英]Why doesn't Win32::ODBC find the ODBC.dll under Perl 5.10 and Cygwin?
我正在尝试使用Perl ODBC连接到Microsoft SQL Server。 我的问题是Perl 5.10.0使用Win32 ODBC驱动程序时出现问题。
如果我运行Perl Shell并执行这一行,则会出现错误。
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软件包:
这似乎是一个已知问题 。 获取libiodbc源 ,应用以下修补程序,构建并安装:
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;
更新: Cygwin的人对此问题有一个待办事项 ,但是它已经有几个月了。 如果等待时间太长,您可以在此期间进行伪造:
#! /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
我已验证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
声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.