error while loading shared libraries: libmysqlclient.so.18

Vom einfachen Programm zum fertigen Debian-Paket, Fragen rund um Programmiersprachen, Scripting und Lizenzierung.
Antworten
Andre72
Beiträge: 9
Registriert: 12.10.2012 10:59:06

error while loading shared libraries: libmysqlclient.so.18

Beitrag von Andre72 » 12.10.2012 11:09:58

Hallo,

ich habe eine kleine Anwendung die sich mit MySQL verbindet und Auswertungen erstellt.
Leider funktioniert das Ganze nicht unter einem Debian 6, so dass ich nach Stundenlangen suchen aufgegeben habe ...
apt-get update - liefert bereits einige Fehlermeldungen

Wenn ich dann "apt-get install libmysqlclient18" eingebe wird zwar etwas geladen, zumindest zeigt das der Progress an, aber dann kommt:
Paketlisten werden gelesen... Fertig Abhängigkeitsbaum wird aufgebaut Statusinformationen werden eingelesen... Fertig E: Paket libmysqlclient18 kann nicht gefunden werden

Google braachte keine weitere Lösung, nur das ich mit dem Problem nicht ganz so alleine darstehe: http://bugs.debian.org/cgi-bin/bugreport.cgi?bug=678196

Kann mir bitte jemand helfen, das Problem in den Griff zu bekommen?
Meine Linux Grundkenntnisse sind leider erschöpft :-)

Vielen Dank

Andre

Clio

Re: error while loading shared libraries: libmysqlclient.so.

Beitrag von Clio » 12.10.2012 15:38:53

Das Paket befindet sich nicht mehr im Repo für Squeeze.
Du kannst es im Archiv finden:
http://snapshot.debian.org/binary/libmysqlclient18/

oder auch in wheezy oder sid:
http://packages.debian.org/search?keywo ... ection=all

Beachte, dass die Version zu den restlichen mysql-Paketen passen muß.

Andre72
Beiträge: 9
Registriert: 12.10.2012 10:59:06

Re: error while loading shared libraries: libmysqlclient.so.

Beitrag von Andre72 » 12.10.2012 23:37:30

Danke für dien Hinweis.
So wie ich nun gelesen habe bekomme ich mit SHOW VARIABLES LIKE "%version%"; die Version der installierten MySQL Version heraus.
Output ist dann dieses:

Code: Alles auswählen

+-------------------------+-------------------+
| Variable_name           | Value             |
+-------------------------+-------------------+
| protocol_version        | 10                |
| version                 | 5.1.63-0+squeeze1 |
| version_comment         | (Debian)          |
| version_compile_machine | i486              |
| version_compile_os      | debian-linux-gnu  |
+-------------------------+-------------------+
Bedeutet das, dass ich Version 5.1.63 des Paket libmysqlclient18 installieren muss?
Die Versionen im Archive sind ja 5.5.17 aufwärts - oder verstehe ich das falsch?

Andre72
Beiträge: 9
Registriert: 12.10.2012 10:59:06

Re: error while loading shared libraries: libmysqlclient.so.

Beitrag von Andre72 » 20.10.2012 13:19:22

Hallo,

kann mir vielleicht jemand helfen welches das richtige Arichive ist und wie man so ein Paket manuell installiert?
Ich denke einfach mit Download und entpacken wird es ja nicht getan sein ...?

Vielen Dank

Andre

Clio

Re: error while loading shared libraries: libmysqlclient.so.

Beitrag von Clio » 20.10.2012 14:39:22

Kann es sein, daß Du die Debianzweige Squeeze (stable) und Wheezy (testing) vermischt?
Für stable wird die libmysqlclient16 benötigt, für testing die von Dir gesuchte libmysqlclient18.
Schau in die /etc/apt/sources.lst, falls dem so ist, wird das so ohne weiteres nicht gehen.

Ein Mischsystem ist niemals zu empfehlen, und für einen Anfänger schon gar nicht.
Entscheide Dich also für eine Variante, dann passen auch die Versionen der libs.

Und noch etwas zum Lesen:
http://debiananwenderhandbuch.de/

Andre72
Beiträge: 9
Registriert: 12.10.2012 10:59:06

Re: error while loading shared libraries: libmysqlclient.so.

Beitrag von Andre72 » 20.10.2012 17:01:44

Auf dem Rechner läuft eine Software für die VoIP Telefonie - mehr habe ich mit dem Rechner gar nicht zu tun.
Ich habe lediglich ein kleines Programm geschrieben, das eine MySQL Tabelle ausliest um die Daten auszuwerten.

Diesen Quelltext habe ich unter Ubuntu 12.04 compiliert und gedacht ich kopiere die ausführbare Datei einfach auf den VoIP Rechner,
also besagtem Debian Rechner.

Es ist also kein Problem mich für eine Distribution zu entscheiden, ich habe mit dem Rechner ja nichts weiter vor - er läuft stabil und
soll nur um eine kleine Anwendung für die Auswertung erweitert werden.

In /etc/apt/sources.list steht nur Squeeze, Wheezy taucht nirgendwo auf.

Also habe ich nun zwei Möglichkeiten - mich in Debian einzuarbeiten und Handbücher zu lesen oder auf dem Zielsystem neu zu kompilieren,
sehe ich das richtig?

Clio

Re: error while loading shared libraries: libmysqlclient.so.

Beitrag von Clio » 20.10.2012 17:14:43

Ja, das siehst Du richtig.
Ubuntu ist mittlerweile von Debian viel zu weit entfernt, um etwas 1:1 übernehmen zu können, was sich auch schon auf etwa gleichalte Systeme auswirkt.
Ubuntu 12.04 ist von diesem Jahr, Squeeze ist aus Febr. 2011 und bald oldstable, das kann nicht zusammen passen.
Du mußt also selbst kompilieren oder hoffen, daß der Systembetreiber auf Wheezy updated.

Benutzeravatar
habakug
Moderator
Beiträge: 4314
Registriert: 23.10.2004 13:08:41
Lizenz eigener Beiträge: MIT Lizenz

Re: error while loading shared libraries: libmysqlclient.so.

Beitrag von habakug » 20.10.2012 17:46:45

Hallo!

Ich verstehe es so, das das Programm "kleineAnwendung" beim Ausführen folgenden Fehler auswirft:

Code: Alles auswählen

error while loading shared libraries: libmysqlclient.so.18
Man kann mit

Code: Alles auswählen

$ ldd /Pfad/zu/kleineAnwendung
die Abhängigkeiten ausgeben lassen.
Der Programmierer von "kleineAnwendung" hatte vielleicht einen Grund die neuere Version von libmysqlclient zu verwenden. Das sollte aber im README oder sonstwo dokumentiert sein.
Als kleinen Hack für zwischendurch könnte man versuchen einen symbolischen Link auf die Version in Squeeze zu legen. Das kann nur schiefgehen oder klappen, tut nicht weh.

Gruß, habakug
( # = root | $ = user | !! = mod ) (Vor der PN) (Debianforum-Wiki) (NoPaste)

Andre72
Beiträge: 9
Registriert: 12.10.2012 10:59:06

Re: error while loading shared libraries: libmysqlclient.so.

Beitrag von Andre72 » 23.10.2012 19:11:45

Hallo,

das mit dem Update möchte ich lieber nicht riskieren, ich habe späer keine Lust mich mit meinen bescheidenen Linux Kenntnisse auch noch um die VoIP zu kümmern wenn da dann etwas nicht mehr funktioniert ...

Der Tipp mit "ldd" war gut, zumindest weiß ich nun, dass ich nur ein Problem habe ...:

Code: Alles auswählen

        linux-gate.so.1 =>  (0xb77b2000)
        libX11.so.6 => /usr/lib/libX11.so.6 (0xb7686000)
        libXxf86vm.so.1 => /usr/lib/libXxf86vm.so.1 (0xb7681000)
        libmysqlclient.so.18 => not found
        libstdc++.so.6 => /usr/lib/libstdc++.so.6 (0xb758c000)
        libm.so.6 => /lib/i686/cmov/libm.so.6 (0xb7566000)
        libgcc_s.so.1 => /lib/libgcc_s.so.1 (0xb7547000)
        libpthread.so.0 => /lib/i686/cmov/libpthread.so.0 (0xb752e000)
        libc.so.6 => /lib/i686/cmov/libc.so.6 (0xb73e7000)
        libxcb.so.1 => /usr/lib/libxcb.so.1 (0xb73ce000)
        libdl.so.2 => /lib/i686/cmov/libdl.so.2 (0xb73ca000)
        libXext.so.6 => /usr/lib/libXext.so.6 (0xb73ba000)
        /lib/ld-linux.so.2 (0xb77b3000)
        libXau.so.6 => /usr/lib/libXau.so.6 (0xb73b7000)
        libXdmcp.so.6 => /usr/lib/libXdmcp.so.6 (0xb73b2000)
Nein, es gibt keinen besonderen Grund die neuste Version der libmysqlclient zu verwenden. Eigentlich im Gegenteil, das Modul was die Lib verwendet ist schon ein paar Jahre alt und hat die Lib nur genommen da der Compiler mit den neusten Links arbeitet - meine Theorie :-)

Wie würde das den mit dem kleinen "Hack" und dem symbolischen Link funktionieren?
Wenn das dann scheitert muss ich halt neu auf dem Ziel Rechner kompilieren, aber wenn es nicht weh tut ist es wohl einen Versuch Wert.

Danke

Andre

Benutzeravatar
KBDCALLS
Moderator
Beiträge: 22444
Registriert: 24.12.2003 21:26:55
Lizenz eigener Beiträge: MIT Lizenz
Wohnort: Dortmund
Kontaktdaten:

Re: error while loading shared libraries: libmysqlclient.so.

Beitrag von KBDCALLS » 23.10.2012 19:37:40

Die Frage ist doch warum gibt es bei dir das Chaos? Versuchst du Squeeze und Wheezy zu mischen? Wie sieht deine sources.list aus? Wie sehen deine Preferences aus ?
Was haben Windows und ein Uboot gemeinsam?
Kaum macht man ein Fenster auf, gehen die Probleme los.

EDV ist die Abkürzung für: Ende der Vernunft

Bevor du einen Beitrag postest:
  • Kennst du unsere Verhaltensregeln
  • Lange Codezeilen/Logs gehören nach NoPaste, in Deinen Beitrag dann der passende Link dazu.

Andre72
Beiträge: 9
Registriert: 12.10.2012 10:59:06

Re: error while loading shared libraries: libmysqlclient.so.

Beitrag von Andre72 » 23.10.2012 19:57:05

Ich versuche nicht die Versionen zu mischen und wenn dann nicht bewußt ...
So wie ich es bisher verstanden habe ist die Ursache doch geklärt - weil ich unter Ubuntu 12.04 kompiliert habe.
Überhaupt stammt nur die Anwendung aus meiner Hand, den funktionsfähigen VoIP Rechner haben wir gekauft und konfigurieren lassen.

Das hier ist die sources.list:

Code: Alles auswählen

# deb cdrom:[Debian GNU/Linux 6.0.2.1 _Squeeze_ - Official i386 NETINST Binary-1 20110628-13:01]/ squeeze main

#deb cdrom:[Debian GNU/Linux 6.0.2.1 _Squeeze_ - Official i386 NETINST Binary-1 20110628-13:01]/ squeeze main

deb http://ftp.de.debian.org/debian/ squeeze main
deb-src http://ftp.de.debian.org/debian/ squeeze main

deb http://security.debian.org/ squeeze/updates main
deb-src http://security.debian.org/ squeeze/updates main

# squeeze-updates, previously known as 'volatile'
deb http://ftp.de.debian.org/debian/ squeeze-updates main
deb-src http://ftp.de.debian.org/debian/ squeeze-updates main
Wie komme ich denn an die Preferences ...?

Andre

Benutzeravatar
KBDCALLS
Moderator
Beiträge: 22444
Registriert: 24.12.2003 21:26:55
Lizenz eigener Beiträge: MIT Lizenz
Wohnort: Dortmund
Kontaktdaten:

Re: error while loading shared libraries: libmysqlclient.so.

Beitrag von KBDCALLS » 24.10.2012 16:46:10

Wenn das Programm unter Ubuntu 12.04 kompiliert worden ist , dann muß das ja schiefgehen. Wenns nicht allzu große Mühe macht dann wäre der einfachste Weg es mit Squeeze neu zu kompilieren.
Was haben Windows und ein Uboot gemeinsam?
Kaum macht man ein Fenster auf, gehen die Probleme los.

EDV ist die Abkürzung für: Ende der Vernunft

Bevor du einen Beitrag postest:
  • Kennst du unsere Verhaltensregeln
  • Lange Codezeilen/Logs gehören nach NoPaste, in Deinen Beitrag dann der passende Link dazu.

geko
Beiträge: 1
Registriert: 27.10.2012 21:05:38

Re: error while loading shared libraries: libmysqlclient.so.

Beitrag von geko » 27.10.2012 21:40:05

Hallo Andre,

abgesehen davon, dass ich Dir auch rate, unter Squeeze dein Tool zu kompilieren, greife ich nochmals kurz den Vorschlag von habakug auf.
Einen symbolischen Link zu der Bibliothek legst du z.B. so an:

unter deinem Squeeze wird es vermutlich so (oder ähnlich) aussehen

Code: Alles auswählen

#> ls -l /usr/lib/libmysqlclient.so*
lrwxrwxrwx 1 root root      20 Aug 17 17:51 /usr/lib/libmysqlclient.so -> libmysqlclient.so.16
lrwxrwxrwx 1 root root      24 Jul  6 20:48 /usr/lib/libmysqlclient.so.16 -> libmysqlclient.so.16.0.0
-rw-r--r-- 1 root root 2054596 Jun 18 08:18 /usr/lib/libmysqlclient.so.16.0.0
dann setzt du einen sym.link, so dass die geforderte Version gefunden werden kann

Code: Alles auswählen

ln -s /usr/lib/libmysqlclient.so.16.0.0 /usr/lib/libmysqlclient.so.18
dann sieht's so aus

Code: Alles auswählen

#>ls -l /usr/lib/libmysqlclient.so*
lrwxrwxrwx 1 root root      20 Aug 17 17:51 /usr/lib/libmysqlclient.so -> libmysqlclient.so.16
lrwxrwxrwx 1 root root      24 Jul  6 20:48 /usr/lib/libmysqlclient.so.16 -> libmysqlclient.so.16.0.0
-rw-r--r-- 1 root root 2054596 Jun 18 08:18 /usr/lib/libmysqlclient.so.16.0.0
lrwxrwxrwx 1 root root      33 Oct 27 21:30 /usr/lib/libmysqlclient.so.18 -> /usr/lib/libmysqlclient.so.16.0.0
anschliessend noch ein

Code: Alles auswählen

#>ldconfig
Der Erfolg dieser Aktion ist aber eher Glücksache, als ein präferiertes Vorgehen :wink:


gutes Gelingen, wie auch immer...

Andre72
Beiträge: 9
Registriert: 12.10.2012 10:59:06

Re: error while loading shared libraries: libmysqlclient.so.

Beitrag von Andre72 » 28.10.2012 10:36:52

Hallo,

vielen Dank für die ganzen Hinweise.
Das mit dem Link habe ich jetzt nicht mehr ausprobiert, aber für den Notfall weis ich nun wenigstens wie es geht, vielen Dank dafür.

Ich habe dann Debian anstelle von Ubuntu installiert und neu kompiliert.
Auf dem Entwicklungsrechner startet die Anwendung nun auch.

Mein neues Wissen habe ich auch angewendet und ldd ausgeführt:
/etc/andre# ldd abrechnung

Code: Alles auswählen

        linux-gate.so.1 =>  (0xb76fb000)
        libX11.so.6 => /usr/lib/libX11.so.6 (0xb75cf000)
        libXxf86vm.so.1 => /usr/lib/libXxf86vm.so.1 (0xb75ca000)
        libmysqlclient.so.16 => /usr/lib/libmysqlclient.so.16 (0xb73d2000)
        libstdc++.so.6 => /usr/lib/libstdc++.so.6 (0xb72dd000)
        libm.so.6 => /lib/i686/cmov/libm.so.6 (0xb72b7000)
        libgcc_s.so.1 => /lib/libgcc_s.so.1 (0xb7298000)
        libpthread.so.0 => /lib/i686/cmov/libpthread.so.0 (0xb727f000)
        libc.so.6 => /lib/i686/cmov/libc.so.6 (0xb7138000)
        libxcb.so.1 => /usr/lib/libxcb.so.1 (0xb711f000)
        libdl.so.2 => /lib/i686/cmov/libdl.so.2 (0xb711b000)
        libXext.so.6 => /usr/lib/libXext.so.6 (0xb710c000)
        libcrypt.so.1 => /lib/i686/cmov/libcrypt.so.1 (0xb70d9000)
        libnsl.so.1 => /lib/i686/cmov/libnsl.so.1 (0xb70c2000)
        libz.so.1 => /usr/lib/libz.so.1 (0xb70ae000)
        /lib/ld-linux.so.2 (0xb76fc000)
        libXau.so.6 => /usr/lib/libXau.so.6 (0xb70ab000)
        libXdmcp.so.6 => /usr/lib/libXdmcp.so.6 (0xb70a6000)
root@gpbx:/etc/andre# linux-gate.so.1 => (0xb77e4000)

Wie es ja bereits alle prognostiziert sind jetzt wohl alle Libs vorhanden.

Dann habe ich noch ein chmod 777 ausgeführt und gestartet - und erhalte die Meldung: Speicherzugriffsfehler ...

Was ist den jetzt wieder verutscht?
Alle Exceprion werden abgefangen und zur Sicherheit habe ich als erste Zeile mal ein "Starte" eingefügt.
Da mein Teststring nicht erscheint bin ich mir also ziemlich sicher, dass die Fehlermeldung vom OS selber kommt.

Wie kann ich da den nun weiter vorgehen?

Vielen Dank

Andre

Cae
Beiträge: 6349
Registriert: 17.07.2011 23:36:39
Wohnort: 2130706433

Re: error while loading shared libraries: libmysqlclient.so.

Beitrag von Cae » 28.10.2012 12:55:58

Andre72 hat geschrieben:Dann habe ich noch ein chmod 777 ausgeführt und gestartet - und erhalte die Meldung: Speicherzugriffsfehler ...
0777 ist eine doofe Idee, weil nun jedermann auf der Maschine seinen eigenen Code hineinschreiben kann (und damit den Account übernimmt). Was du willst, ist ein 0755 oder von mir aus auch 0500… lies' dir die Manpage von chmod(1) durch.
Andre72 hat geschrieben:Alle Exceprion werden abgefangen und zur Sicherheit habe ich als erste Zeile mal ein "Starte" eingefügt.
Da mein Teststring nicht erscheint bin ich mir also ziemlich sicher, dass die Fehlermeldung vom OS selber kommt.
Ja, das tut sie. Allerdings würde ich mich nicht auf "mein String kommt nicht durch" verlassen, es kann gut sein, dass er noch im stdout-Buffer hängt und das Teil dann segfaultet und der Buffer nicht mehr geleert wird. Dann sieht man die Ausgabe nicht, obwohl sie geschrieben wurde, ggf. erzwingt man mit fflush(stdout); die Leerung.
Andre72 hat geschrieben:Wie kann ich da den nun weiter vorgehen?
strace anwenden, gucken, wo das Programm dagegen knallt.

Gruß Cae
If universal surveillance were the answer, lots of us would have moved to the former East Germany. If surveillance cameras were the answer, camera-happy London, with something like 500,000 of them at a cost of $700 million, would be the safest city on the planet.

—Bruce Schneier

Andre72
Beiträge: 9
Registriert: 12.10.2012 10:59:06

Re: error while loading shared libraries: libmysqlclient.so.

Beitrag von Andre72 » 28.10.2012 14:48:07

Hallo Cae,

das war schon wieder eine sehr interessante Lektion, vielen Dank dafür.

Dies sind strace letzten Worte:
28278 gettimeofday({1351430033, 590696}, NULL) = 0
28278 --- SIGSEGV (Segmentation fault) @ 0 (0) ---
28278 +++ killed by SIGSEGV +++

Wenn ich mir nun gettimeofday ansehe, so finde ich diese Parameter:
int gettimeofday(struct timeval *tv, struct timezone *tz);

Liegt es nun daran, dass timezone nicht NULL sein darf?
Was mich aber total irritiert - warum tritt dieser Fehler nicht bei Ubuntu 12.04 und meinem Entwicklungs Squeeze aus?
Da ich ja das Compilat vom Entwicklungsrechner auf das Produktiv-System kopiere kann es ja nicht an den Header Datein liegen...

Kann Du mir vielleicht noch helfen das hier zu verstehen?

Vielen Dank

Andre

Cae
Beiträge: 6349
Registriert: 17.07.2011 23:36:39
Wohnort: 2130706433

Re: error while loading shared libraries: libmysqlclient.so.

Beitrag von Cae » 28.10.2012 17:15:06

Das NULL ist offensichtlich kein Problem, dann ist der Output vermutlich UTC, also ohne Zeitzonenoffset:

Code: Alles auswählen

% cat >gettimeofday.c <<EOF
#include <sys/time.h> /* gettimeofday() */
#include <stdlib.h>   /* NULL */

int main(void) {
	struct timeval fnord = { 1351430033, 590696 };
	return gettimeofday(&fnord, NULL);
}
EOF
% cc -o gettimeofday gettimeofday.c && ./gettimeofday; echo $?
0 
%
Aber es kann gut sein, dass irgendetwas anderes den Segfault macht, evtl. in einem anderen Thread (mit strace -ff beobachten). Kann man den Thread hier nun so zusammenfassen, dass es prinzipiell geht und das Thema libmysql abgeharkt ist?

Gruß Cae
If universal surveillance were the answer, lots of us would have moved to the former East Germany. If surveillance cameras were the answer, camera-happy London, with something like 500,000 of them at a cost of $700 million, would be the safest city on the planet.

—Bruce Schneier

Andre72
Beiträge: 9
Registriert: 12.10.2012 10:59:06

Re: error while loading shared libraries: libmysqlclient.so.

Beitrag von Andre72 » 28.10.2012 17:39:28

Ja richtig, der Thread ist erledigt, vielen Dank an alle Beteiligten!
Ich öffne dann einen neuen mit dem aktuellen Problem ...

Gruß

Andre

Antworten