2012-04-25 14 views
8

Sto utilizzando ArchLinux e sto provando a installare i driver di avanzamento di OpenEdge in modo che possa accedervi tramite PHP. Ho installato il pacchetto unixODBC ed i piloti, ma quando prova la connessione tramite isql o PHP, ottengo lo stesso errore ...unixodbc driver manager non può aprire la libreria specificata all'installazione

# 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 

La cosa incasinato è che "/ usr/dlc/ODBC /lib/pgoe1023.so "esiste attualmente, l'ho anche collegato in modo simbolico da"/usr/dlc ".

Di seguito sono i miei file ini ...

odbc.ini

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

ODBCINST.INI (ho tolto alcune delle credenziali come è irrilevante)

[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 Aggiunta di ulteriori informazioni ...

Th ey sembra sia a 32 bit, tranne che non ho idea di quello che sto facendo a riguardo.

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

E sembra che manca alcune dipendenze ...

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

ho copiato "libpgicu23.so" per/usr/lib e risolto il problema, ma ho ancora bisogno di "libstdC++ - libc6.2-2.so.3", ma quando ne ho preso uno da internet ha detto "errore durante il caricamento delle librerie condivise: /usr/lib/libstdc++-libc6.2-2.so. 3: file ELF OS ABI non valido "

Realmente ho persino creato un collegamento simbolico da "libstdC++ - libc6.2-2.so.3" a "libstdC++. So", ma nonostante abbia risolto il problema tramite ldd, ha causato questo errore quando ho interrogato isql ..

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

Non ho mai installato odbc su un * nix box, ma abbiamo fatto la stessa cosa su una finestra di Windows e ha funzionato bene. Qualsiasi input apprezzato.

risposta

14

Controllare unixODBC e il driver sono la stessa architettura vale a dire, correre:

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

essi dovrebbero essere entrambi a 32 bit o 64 bit. UnixODBC a 64 bit non può utilizzare driver a 32 bit e viceversa.

Non è necessario il collegamento simbolico.

Eseguire ldd su /usr/dlc/odbc/lib/pgoe1023.so per verificare che tutte le dipendenze siano state trovate.

Controllare /usr/dlc/odbc/lib/pgoe1023.so è eseguibile.

BTW, presumo che abbiate le etichette sbagliate come il contenuto del vostro file odbc.ini dovrebbe essere il odbcinst.ini e viceversa.

+0

OK Ho apportato una modifica alla mia domanda con ulteriori informazioni. È strano perché in realtà avevo i file ini al contrario, tuttavia quando li inverto, l'errore peggiora (dice che non riesce a trovare DSN/Driver). Tuttavia, quando eseguo ldd, ottengo alcune dipendenze mancanti, quindi cercherò di risolverlo, ho trovato qualcosa che penso possa aiutare qui: http://remidian.com/progress/progress-openedge-database-101b -install-on-centos-rhel.html – PolishHurricane

+0

Ordinariamente non avrebbe alcun senso che i file ini fossero sbagliati, ma come unixODBC ti permette di specificare driver = XXX dove XXX è una voce in odbcint.ini OR Driver = path_to_shared_object se l'è cavata. Il fatto che tutto sia a 32 bit, tuttavia, sei la tua dipendenza mancante, non puoi fare quello che hai fatto e aspettarti che funzioni. L'ABI non valido suggerisce che hai installato un oggetto condiviso incompatibile. Non è così semplice. – bohica

2

Una cosa da controllare sono i numeri di versione minori delle librerie unixODBC a cui è collegato il driver. Da unixODBC 2.3.1 ho cambiato il numero di lib minore in 2 per riflettere la modifica della dimensione di SQLLEN su piattaforme a 64 bit.Tuttavia, se la lib del driver è stata collegata a una versione precedente, è in cerca di una libodbc.so.1 e le sorgenti correnti forniscono libodbc.so.2. La soluzione semplice è fornire un collegamento simbolico da * .so.1 a * .so.2. Lo stesso vale anche per libodbcinst.so, quindi controlla anche quello.