2016-02-13 5 views
8

Ich versuche eine Verbindung von einer Python-App mit pyodbc zu einem MS SQL Server herzustellen. Ich habe pyodbc und unixODBC installiert und ich habe versucht, den MS-Treiber für Linux zu installieren. Ich denke, das Problem ist, dass der MS-Treiber Abhängigkeiten fehlt, aber soweit ich weiß, dass die Abhängigkeiten installiert sind. Da der Microsoft-Treiber nicht über yum installierbar war, musste ich das Installationsskript ausführen und ausführen. Also, ich bin mir sicher, dass es einige manuelle Arbeit gibt, die ich tun muss, um die unten fehlenden Links zu lösen. Ich bin mir nicht sicher, wie ich das machen soll, da ich neu bei Linux bin. Ich habe meine Konfigurationsdateien auch nur für den Fall enthalten.Linker-Fehler mit libmsodbcsql-13.0.so.0.0 verhindert pyODBC zu MS SQL-Verbindung. CentOS 7

Wenn ich laufen ...

ldd /opt/microsoft/msodbcsql/lib64/libmsodbcsql-13.0.so.0.0 

ich folgendes ...

/opt/microsoft/msodbcsql/lib64/libmsodbcsql-13.0.so.0.0: /lib64/libstdc++.so.6: version `GLIBCXX_3.4.20' not found (required by /opt/microsoft/msodbcsql/lib64/libmsodbcsql-13.0.so.0.0) 

/opt/microsoft/msodbcsql/lib64/libmsodbcsql-13.0.so.0.0: /lib64/libstdc++.so.6: version `CXXABI_1.3.8' not found (required by /opt/microsoft/msodbcsql/lib64/libmsodbcsql-13.0.so.0.0) 

linux-vdso.so.1 => (0x00007fff22b27000) 
libdl.so.2 => /lib64/libdl.so.2 (0x00007f03de43f000) 
libodbcinst.so.2 => /lib64/libodbcinst.so.2 (0x00007f03de22d000) 
libuuid.so.1 => /lib64/libuuid.so.1 (0x00007f03de027000) 
libgss.so.3 => not found 
libkrb5.so.3 => /lib64/libkrb5.so.3 (0x00007f03ddd42000) 
libcrypto.so.1.0.0 => not found 
libssl.so.1.0.0 => not found 
libstdc++.so.6 => /lib64/libstdc++.so.6 (0x00007f03dda39000) 
....(THE REST ARE FOUND) 

odbcinst.ini odbc.ini

Jede Hilfe oder Anregungen zu bekommen sind willkommen. Danke!

+0

Ihre Screenshots sind nicht lesbar. Kannst du nicht einfach die Fehlermeldungen in dein Q kopieren/einfügen, wie du es mit der 'ldd' Ausgabe gemacht hast? Viel Glück,. – shellter

+0

Ich denke, Sie arbeiten mit einer inkompatiblen Version von unixODBC für msodbcsql. Überprüfen Sie, ob der Befehl '' odbc_config --version''' die erwartete Version für msodbcsql zurückgibt. – bull90

Antwort

2

Ich erinnere mich, dass ich dieses Problem hatte, aber es war vor mehr als einem Jahr und ich habe keinen Zugriff mehr auf diesen Server.

Soweit ich mich erinnern kann, war es eine Versionskonflikt. Wenn Sie Ihre ldd Ausgabe sehen, suchen sie nach libgss.so.3, libcrypto.so.1.0.0 usw. Vielleicht haben Sie eine andere Version dieser Bibliothek auf Ihrem System installiert.

Wenn ich meine Installationshinweise durchführe, sieht es so aus, als hätte ich das Problem behoben, indem ich (weiche) Links erstellt habe, die auf die Bibliotheken verweisen, die ich auf meinem System hatte. Und natürlich habe ich diesen Links die Namen gegeben, nach denen msodbc gesucht hat. Ja ... ein bisschen "unhöflich", aber es hat für mich funktioniert.

+0

Danke für die Bestätigung. Dies ist die Richtung, in die ich gegangen bin. Schnelle Frage. Erstelle ich die weiche Verknüpfung an dem Ort, an dem die Binärdatei nach der Datei sucht? Also in meinem Fall geht es in /lib64/libstdc++.so.6 und umleiten, wo immer die aktuelle Version ist? Irgendeine Möglichkeit eines Beispiel-ln -s-Befehls, um mich zu starten. Vielen Dank. –

+0

Ich konnte keine weichen Links unter/lib oder/usr/lib auf diesem Server erstellen (Sicherheitseinschränkungen und ich hatte kein root-Passwort). Also ... Ich habe diese Softlinks in einem Verzeichnis unter meinem Home-Verzeichnis ('$ {HOME}/mslib /') erstellt und dieses Verzeichnis zu meinem LD_LIBRARY_PATH ... – mauro

+0

Beispiel-Befehl hinzugefügt: 'mkdir $ HOME/mslib' und dann 'ln -s /usr/lib/libgss-3.0.0 $ HOME/mslib/libgss-2.8.0' (Ich kann mich nicht an die Versionsnummer erinnern - ich habe hier nur Zufallszahlen geschrieben). Zuletzt legen Sie Ihr neues LIB-Verzeichnis ** vor ** die anderen: 'export LD_LIBRARY_PATH = $ {HOME}/mslib: $ {LD_LIBRARY_PATH}' – mauro