2012-04-25 16 views
8

Tôi đang sử dụng ArchLinux và tôi đang cố gắng cài đặt trình điều khiển tiến trình OpenEdge để tôi có thể truy cập nó qua PHP. Tôi đã cài đặt gói unixodbc và các trình điều khiển, nhưng khi tôi kiểm tra kết nối qua isql hoặc PHP, tôi nhận được lỗi tương tự ...trình quản lý trình điều khiển unixodbc không thể mở thư viện được chỉ định khi cài đặt

# isql -3 SUBS2A 
[01000][unixODBC][Driver Manager]Can't open lib '/usr/dlc/odbc/lib/pgoe1023.so' : file not found 
[ISQL]ERROR: Could not SQLConnect 

Điều sai lầm là "/ usr/dlc/odbc /lib/pgoe1023.so "hiện đang tồn tại, tôi thậm chí còn liên kết nó với"/usr/dlc ".

Sau đây là các file .ini của tôi ...

ODBC.INI

[SUBS2A] 
Description = ODBC Driver for Progress 
Driver = /usr/dlc/odbc/lib/pgoe1023.so 
FileUsage = 1 

ODBCINST.INI (Tôi đã gỡ bỏ một số thông tin quan trọng vì nó là không thích hợp)

[ODBC-test] 
Description = SUBS2A 
Driver = SUBS2A 
Server = 192.168.1.2 
Port = 4000 
APILevel=1 
ConnectFunctions=YYN 
CPTimeout=60 
DriverODBCVer=03.60 
FileUsage=0 
SQLLevel=0 
UsageCount=1 
ArraySize=50 
DefaultLongDataBuffLen=2048 
DefaultIsolationLevel= READ COMMITTED 
StaticCursorLongColBuffLen=4096 

EDIT Đang thêm thông tin ...

Th ey xuất hiện cho cả hai là 32-bit, ngoại trừ tôi không có ý tưởng những gì tôi đang làm về điều đó.

[[email protected] etc]# file /usr/bin/isql 
/usr/bin/isql: ELF 32-bit LSB executable, Intel 80386, version 1 (SYSV), dynamically linked (uses shared libs), for GNU/Linux 2.6.27, BuildID[sha1]=0xd1bc16c119       bb5cad6fea9e2a9abc1d06794a2775, stripped 
[[email protected] etc]# file /usr/dlc/odbc/lib/pgoe1023.so 
/usr/dlc/odbc/lib/pgoe1023.so: ELF 32-bit LSB shared object, Intel 80386, version 1 (SYSV), dynamically linked, not stripped 

Nó xuất hiện rằng nó thiếu một số phụ thuộc ...

[[email protected] lib]# ldd pgoe1023.so 
     linux-gate.so.1 => (0xb77c2000) 
     libpthread.so.0 => /lib/libpthread.so.0 (0xb7499000) 
     librt.so.1 => /lib/librt.so.1 (0xb7490000) 
     libpgicu23.so => not found 
     libdl.so.2 => /lib/libdl.so.2 (0xb748b000) 
     libstdc++-libc6.2-2.so.3 => not found 
     libm.so.6 => /lib/libm.so.6 (0xb745e000) 
     libc.so.6 => /lib/libc.so.6 (0xb72bc000) 
     /lib/ld-linux.so.2 (0xb77c3000) 

CẬP NHẬT

tôi sao chép "libpgicu23.so" đến/usr/lib và nó giải quyết vấn đề đó, nhưng tôi vẫn cần "libstdC++ - libc6.2-2.so.3", nhưng khi tôi lấy một từ internet nó nói "lỗi trong khi tải thư viện được chia sẻ: /usr/lib/libstdc++-libc6.2-2.so. 3: Tệp ELF OS ABI không hợp lệ "

Tôi thậm chí còn thực hiện một liên kết tượng trưng từ "libstdC++ - libc6.2-2.so.3" thành "libstdC++. Vậy", nhưng mặc dù nó giải quyết được vấn đề qua ldd, nó gây ra lỗi này khi tôi truy vấn isql ..

isql: symbol lookup error: /usr/dlc/odbc/lib/pgoe1023.so: undefined symbol: __builtin_vec_new

Tôi chưa bao giờ cài đặt odbc trên hộp * nix, nhưng chúng tôi đã làm điều tương tự trên hộp cửa sổ và hoạt động tốt. Bất kỳ đầu vào nào được đánh giá cao.

Trả lời

14

Kiểm tra unixODBC và lái xe của bạn đều giống nhau kiến ​​trúc ví dụ: chạy:

which isql 
file xxx (whatever came back from above) 
file /usr/dlc/odbc/lib/pgoe1023.so 

Họ nên cả hai được 32 bit hoặc 64 bit. Một unixODBC 64 bit không thể sử dụng trình điều khiển 32 bit và ngược lại.

Bạn không cần liên kết tượng trưng đó.

Chạy ldd trên /usr/dlc/odbc/lib/pgoe1023.so để đảm bảo tất cả các phụ thuộc được tìm thấy.

Kiểm tra /usr/dlc/odbc/lib/pgoe1023.so có thể thực thi được.

BTW, tôi đoán bạn đã nhận được nhãn của mình theo cách không đúng vì nội dung tệp odbc.ini của bạn phải là odbcinst.ini và ngược lại.

+0

OK Tôi đã chỉnh sửa câu hỏi của mình với nhiều thông tin hơn. Thật kỳ quặc bởi vì tôi thực sự đã có các tập tin ini ngược lại, tuy nhiên khi tôi đảo ngược chúng, lỗi trở nên tồi tệ hơn (nói rằng nó không thể tìm thấy DSN/Driver). Tuy nhiên khi tôi chạy ldd, tôi nhận được một số phụ thuộc bị thiếu, vì vậy tôi sẽ cố gắng sửa chữa điều đó, tôi tìm thấy một cái gì đó mà tôi nghĩ rằng có thể giúp đỡ ở đây: http://remidian.com/progress/progress-openedge-database-101b -install-on-centos-rhel.html – PolishHurricane

+0

Thông thường nó sẽ không làm cho bất kỳ ý nghĩa rằng bạn đã có các tập tin ini sai cách xung quanh nhưng như unixODBC cho phép bạn chỉ định một trong hai trình điều khiển = XXX, nơi XXX là một mục nhập trong odbcint.ini OR Driver = path_to_shared_object bạn đã bỏ qua nó. Thực tế là tất cả mọi thứ là 32 bit os tốt tuy nhiên, bạn lại thiếu phụ thuộc của bạn, bạn không thể làm những gì bạn đã làm và mong đợi nó để làm việc. ABI không hợp lệ cho thấy bạn đã cài đặt một đối tượng chia sẻ không tương thích. Nó không đơn giản như vậy. – bohica

2

Một điều cần kiểm tra là số phiên bản phụ của các thư viện unixODBC mà trình điều khiển được liên kết. Vì unixODBC 2.3.1, tôi đã thay đổi số lib nhỏ thành 2 để phản ánh sự thay đổi kích thước SQLLEN trên nền tảng 64 bit.Tuy nhiên nếu trình điều khiển lib được liên kết với một phiên bản trước đó, nó sẽ tìm kiếm một libodbc.so.1, và các nguồn hiện tại cung cấp libodbc.so.2. Giải pháp đơn giản là cung cấp liên kết sym từ * .so.1 đến * .so.2. Điều này cũng đúng với libodbcinst.so, vì vậy hãy kiểm tra điều đó.