سؤال

أحاول استخدام 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:

  • بيرل (5.10.0-5)
  • بيرل libwin32 (0.28-2)
هل كانت مفيدة؟

المحلول

يبدو أن هذا أ قضية معروفة.والاستيلاء على مصدر الليبيودبك, ، قم بتطبيق التصحيح التالي وإنشاءه وتثبيته:

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 لديك TODO لهذه المشكلة, ، ولكن عمره الآن عدة أشهر.في حالة الانتظار لفترة طويلة جدًا، يمكنك تزييفها في هذه الأثناء:

#! /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 موجود؟إذا كان الأمر كذلك، هل لديك إذن القراءة والتنفيذ؟

يوجد تعليق أعلى السطر 201 من /usr/lib/perl5/5.10/i686-cygwin/DynaLoader.pm مباشرةً:

# 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 مع الإسناد
لا تنتمي إلى StackOverflow
scroll top