windows - 为什么 Win32::ODBC 在 Perl 5.10 和 Cygwin 下找不到 ODBC.dll?

标签 windows database perl odbc cygwin

我正在尝试使用 Perl ODBC 连接到 Microsoft SQL 服务器。我的问题是 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 包:

  • perl (5.10.0-5)
  • perl-libwin32 (0.28-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;

更新: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

关于windows - 为什么 Win32::ODBC 在 Perl 5.10 和 Cygwin 下找不到 ODBC.dll?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/825672/

相关文章:

windows - 无法从 WinApi crate 调用 CryptDecrypt,因为它找不到模块

windows - 使用命令行更改键盘输入

java - Oracle JDBC 在 Linux 上没有给出预期的输出

perl - 从 DELETE 路由重定向后无法测试呈现的输出 - Mojolicious

c# - SQLite 不存储/检索数据库

javascript - Node Windows NPM 未安装

database - MongoDB 从多个文档中提取子文档数组值

database - 擅长存储生物序列的商业数据库

perl - 我如何配置 Strawberry Perl 从 c :\strawberry? 以外的东西运行

perl - 如何在 Perl 程序中的特定文件上设置断点?