2012-04-25 5 views
8

Ich benutze ArchLinux und ich versuche, OpenEdge Fortschritt Treiber zu installieren, damit ich über PHP darauf zugreifen kann. Ich installiert haben die unixodbc Paket und die Treiber, aber wenn ich die Verbindung über isql oder PHP zu testen, habe ich den gleichen Fehler ...Unixodbc Treiber-Manager kann angegebene Bibliothek nicht auf Installation öffnen

# 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 

Die verkorkste Sache ist, dass „/ usr/dlc/odbc /lib/pgoe1023.so "existiert derzeit, ich habe es sogar von"/usr/dlc "aus verlinkt.

Die folgenden sind meine ini-Dateien ...

odbc.ini

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

odbcinst.ini (I einige der Anmeldeinformationen entfernt, wie es irrelevant ist)

[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 

BEARBEITEN Hinzufügen weiterer Informationen ...

Th Beide scheinen 32-Bit zu sein, außer dass ich keine Ahnung habe, was ich diesbezüglich mache.

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

Es scheint, dass es einige Abhängigkeiten fehlt ...

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

Ich kopierte "libpgicu23.so"/usr/lib und es löste das Problem, aber ich brauche immer noch "libstdC++ - libc6.2-2.so.3", aber als ich mir einen aus dem Internet schnappte, hieß es "Fehler beim Laden von gemeinsam genutzten Bibliotheken: /usr/lib/libstdc++-libc6.2-2.so. 3: ELF-Datei OS ABI ungültig "

Ich habe tatsächlich sogar einen Symlink von "libstdC++ - libc6.2-2.so.3" nach "libstdC++. So" gemacht, aber obwohl es das Problem über ldd gelöst hat, hat es diesen Fehler verursacht, als ich isql abgefragt habe.

Ich habe nie odbc auf einer * nix-Box installiert, aber wir haben das gleiche auf einer Windows-Box und es hat gut funktioniert. Jede Eingabe wird geschätzt.

Antwort

14

überprüfen unixODBC und Ihre Fahrer sind die gleichen Architektur heißt laufen:

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

sollten Sie beide sein 32-Bit- oder 64-Bit. Ein 64-Bit-UnixODBC kann keine 32-Bit-Treiber verwenden und umgekehrt.

Sie sollten diesen Symlink nicht benötigen.

Führen Sie ldd on /usr/dlc/odbc/lib/pgoe1023.so aus, um sicherzustellen, dass alle Abhängigkeiten gefunden werden.

Überprüfen Sie /usr/dlc/odbc/lib/pgoe1023.so ist ausführbar.

BTW, ich vermute, Sie haben Ihre Etiketten falsch herum als Ihre odbc.ini Datei Inhalt sollte die odbcinst.ini und umgekehrt.

+0

Okay, ich habe eine Bearbeitung meiner Frage mit mehr Informationen vorgenommen. Es ist verrückt, weil ich eigentlich die INI-Dateien in umgekehrter Reihenfolge hatte, aber wenn ich sie umkehre, wird der Fehler schlechter (sagt, dass es DSN/Treiber nicht finden kann). Aber wenn ich ldd starte, bekomme ich einige fehlende Abhängigkeiten, also werde ich versuchen, das zu beheben, ich habe etwas gefunden, von dem ich denke, dass es hier helfen könnte: http://remidian.com/progress/progress-openedge-database-101b -install-on-centos-rhel.html – PolishHurricane

+0

Normalerweise würde es keinen Sinn machen, dass Sie die INI-Dateien falsch herum hatten, aber als unixODBC können Sie entweder driver = XXX angeben, wobei XXX ein Eintrag in odbcint.ini OR Driver ist = path_to_shared_object du bist damit durchgekommen. Die Tatsache, dass alles 32 Bit ist gut, aber Sie sind Ihre fehlende Abhängigkeit, können Sie nicht tun, was Sie getan haben und erwarten, dass es funktioniert. Der ABI-Fehler weist darauf hin, dass Sie ein inkompatibles freigegebenes Objekt installiert haben. So einfach ist das nicht. – bohica

2

Eine Sache zu überprüfen sind die Nebenversionsnummern der UnixODBC-Bibliotheken, mit denen der Treiber verknüpft ist. Seit UnixODBC 2.3.1 habe ich die kleinere Bibliotheksnummer auf 2 geändert, um die Änderung der SQLLEN-Größe auf 64-Bit-Plattformen widerzuspiegeln.Wenn jedoch die Treiberbibliothek mit einer früheren Version verknüpft wurde, sucht sie nach einer libodbc.so.1, und aktuelle Quellen stellen libodbc.so.2 bereit. Eine einfache Lösung besteht darin, einen symbolischen Link von * .so.1 zu * .so.2 bereitzustellen. Das gleiche gilt auch für libodbcinst.so, überprüfen Sie das ebenfalls.

Verwandte Themen