2012-04-25 16 views
8

我正在使用ArchLinux,我正嘗試安裝OpenEdge進度驅動程序,以便通過PHP訪問它。我已經安裝了unixODBC數據包和驅動程序,但是當我測試通過isql或PHP的連接,我得到了同樣的錯誤......unixodbc驅動程序管理器無法在安裝時打開指定的庫

# 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 

的搞砸的事情是,「在/ usr/DLC/ODBC /lib/pgoe1023.so「目前存在,我甚至將其從」/ usr/dlc「中鏈接了出來。

以下是我的.ini文件...

ODBC.INI

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

ODBCINST.INI(我刪除了一些憑證的,因爲它是不相關的)

[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 

編輯添加更多信息...

Th ey看起來都是32位的,除了我不知道我在做什麼。

[[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 

但看來它缺少一些依賴...

[[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) 

UPDATE

我複製 「libpgicu23.so」 到/ usr/lib和它解決了這個問題,但我仍然需要「libstdC++ - libc6.2-2.so.3」,但是當我從互聯網上抓取一個時,它說:「加載共享庫時出錯:/usr/lib/libstdc++-libc6.2-2.so。 3:ELF文件OS ABI無效「

我實際上甚至提出了從「libstdC++ - libc6.2-2.so.3」到「libstdC++。so」的符號鏈接,但即使它通過ldd解決了問題,但在查詢isql時卻導致了此錯誤..

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

我從來沒有在* nix盒子上安裝過odbc,但我們在Windows盒子上做了同樣的事情,它工作的很好。任何輸入讚賞。

回答

14

檢查的unixODBC,驅動程序是相同的架構,即運行:

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

他們都應該是32位或64位。 64位unixODBC不能使用32位驅動程序,反之亦然。

你不應該需要這個符號鏈接。

在/usr/dlc/odbc/lib/pgoe1023.so上運行ldd以確保找到所有依賴關係。

檢查/usr/dlc/odbc/lib/pgoe1023.so是可執行文件。

順便說一句,我認爲你的標籤是錯誤的,因爲你的odbc.ini文件內容應該是odbcinst.ini,反之亦然。

+0

好吧,我用更多的信息編輯了我的問題。 這很奇怪,因爲我實際上確實有ini文件反向,但是當我反轉它們時,錯誤變得更糟(稱它找不到DSN/Driver)。然而,當我運行ldd時,我得到了一些缺失的依賴關係,所以我將嘗試解決這個問題,我發現了一些我認爲可能有用的地方:http://remidian.com/progress/progress-openedge-database-101b -install-on-centos-rhel.html – PolishHurricane 2012-04-25 16:25:27

+0

通常,你沒有任何意義,你有ini文件錯誤的方式,但作爲unixODBC允許您指定驅動程序= XXX其中XXX是odbcint.ini中的條目或驅動程序= path_to_shared_object你逃脫了。事實上,一切都是32位操作系統,不過,你是你的缺失依賴,你不能做你所做的,並期望它的工作。 ABI無效表明您已安裝不兼容的共享對象。這不是那麼簡單。 – bohica 2012-04-25 20:28:28

2

有一點需要檢查的是驅動程序所鏈接的unixODBC庫的次要版本號。由於unixODBC 2.3.1我將次要庫號改爲2以反映64位平臺上的SQLLEN大小的變化。但是,如果驅動程序庫與早期版本鏈接,它將查找libodbc.so.1,而當前源提供libodbc.so.2。簡單的解決方案是提供從* .so.1到* .so.2的sym鏈接。 libodbcinst.so也是如此,所以檢查一下。

相關問題