'cannot find -lmysqlclient' ... Klappe die x'te ... [edit #3]

FreeBSD, Gentoo, openSUSE, CentOS, Ubuntu, Debian
djcrackman
Posts: 207
Joined: 2005-06-02 11:58

'cannot find -lmysqlclient' ... Klappe die x'te ... [edit #3]

Post by djcrackman »

Wünsche einen angenehmen Abend ....

Seit nun mehr 2 Tagen bin ich am 'stricken' und komm nicht wirklich weiter: ich versuche mod_sqlinclude für den Apache (1.3.34) zu bauen, jedoch scheiterts immer an dem blöden mysqlclient.

Nach ca 5h googlen weiß ich nun, dass mysqclient die libmysqlclient(.a|.so) sein soll(te). Gut, nachdem ich in meinem lib-dir (MySQL-Source von mysql.com) keine .so file finden konnte habe ich ld angeworfen:

Code: Select all

# ld -share -o /opt/mysql_max_4.1.14_i686_main/lib/libmysqlclient.so /opt/mysql_max_4.1.14_i686_main/lib/libmysqlclient.a
Das hat auch ohne Fehler funktioniert und das .so file wurde auch erzeugt. Wenn ich nun jedoch mod_sqlinclude bauen will, dann läuft das so ab:

Code: Select all

# /opt/apache_1.3.34/bin/apxs -l/opt/mysql_max_4.1.14_i686_main/lib/libmysqlclient.so -c mod_sqlinclude.c
gcc -DLINUX=22 -DHAVE_SET_DUMPABLE -DNO_DBM_REWRITEMAP -DUSE_HSREGEX -fpic -DSHARED_MODULE -I/opt/apache_1.3.34/include  -c mod_sqlinclude.c
gcc -shared -o mod_sqlinclude.so mod_sqlinclude.o -l/opt/mysql_max_4.1.14_i686_main/lib/libmysqlclient.so
/usr/lib/gcc-lib/i386-pc-linux-gnu/3.3.5-20050130/../../../../i386-pc-linux-gnu/bin/ld:
cannot find -l/opt/mysql_max_4.1.14_i686_main/lib/libmysqlclient.so
collect2: ld returned 1 exit status
apxs:Break: Command failed with rc=1
Ein listing von /opt/mysql_max_4.1.14_i686_main/lib gibt folgendes aus:

Code: Select all

# dir /opt/mysql_max_4.1.14_i686_main/lib
total 14504
drwxr-xr-x   2 root root    4096 Mar 19 20:57 .
drwxr-xr-x  14 root root    4096 Aug 30  2005 ..
-rw-r--r--   1 root root   10886 Aug 17  2005 libdbug.a
-rw-r--r--   1 root root  879270 Oct 25  2001 libmygcc.a
-rw-r--r--   1 root root    1685 Aug 17  2005 libmysql.imp
-rw-r--r--   1 root root 1290522 Aug 17  2005 libmysqlclient.a
-rwxr-xr-x   1 root root     533 Mar 19 20:57 libmysqlclient.so
-rw-r--r--   1 root root 1298296 Aug 17  2005 libmysqlclient_r.a
-rw-r--r--   1 root root 8896028 Aug 17  2005 libmysqld.a
-rw-r--r--   1 root root 1045628 Aug 17  2005 libmystrings.a
-rw-r--r--   1 root root  276732 Aug 17  2005 libmysys.a
-rw-r--r--   1 root root 1079116 Aug 17  2005 libndbclient.a
-rwxr-xr-x   1 root root    1683 Aug 17  2005 libndbclient.la
#
Verzeichnisse sehen wie folgt aus:

/opt/mysql_max_4.1.14_i686_main => mysql_server
/opt/apache_1.3.34 => web_server

1. Frage: Was ist der mysqlclient, wenn es nicht libmysqlclient.a ist?

2. Frage: Was mach ich falsch, sollt alles bisher durchgeführte korrekt sein?! *kopfkratz*

Danke im Voraus (ein mittlerweile verzweifelter Spinner ;)).

==== [edit #1] ====

Des Rätsels Lösung:

Code: Select all

# /opt/mysql_max_4.1.14_i686_main/bin/mysql_config --libs
-L/opt/mysql_max_4.1.14_i686/lib -lmysqlclient
Gut, das ist mal der Output der MySQL-Konfiguration. Danach mal eben mod_sqlinclude gebastelt:

Code: Select all

# /opt/apache_1.3.34/bin/apxs -L/opt/mysql_max_4.1.14_i686_main/lib -lmysqlclient -c mod_sqlinclude.c
gcc -DLINUX=22 -DHAVE_SET_DUMPABLE -DNO_DBM_REWRITEMAP -DUSE_HSREGEX -fpic -DSHARED_MODULE -I/opt/apache_1.3.34/include  -c mod_sqlinclude.c
gcc -shared -o mod_sqlinclude.so mod_sqlinclude.o -L/opt/mysql_max_4.1.14_i686_main/lib -lmysqlclient
#
Gut, hat also auch funktioniert. Modul mal eben in das Apache Verzeichnis gehievt:

Code: Select all

# cp mod_sqlinclude.so /opt/apache_1.3.34/libexec/
*kopfkratz* Dachte eigentlich, das wärs gewesen (die entsprechenden Parts in meiner Apache config sind bereits definiert), doch da hab ich mich getäuscht ...

Code: Select all

# /opt/apache_1.3.34/bin/apachectl configtest
Syntax error on line 22 of /opt/apache_1.3.34/conf/httpd.conf:
Cannot load /opt/apache_1.3.34/libexec/mod_sqlinclude.so into server: libmysqlclient.so: cannot open shared object file: No such file or directory
#
Äh ja .... Vorschläge? :roll:

==== [edit #2] ====

Und weil das Ganze so schön war, gleich nochmal alles von Anfang, da da irgendwo ein Hund begraben liegt:

Code: Select all

# rm -ifr /opt/apache_1.3.34/libexec/mod_sqlinclude.so /opt/mysql_max_4.1.14_i686_main/lib/libmysqlclient.so ./mod_sqlinclude-1.4
Und von Vorne:

Code: Select all

# tar xvfz mod_sqlinclude-1.4.tar.gz && cd mod_sqlinclude-1.4
Da die Makefile so gesehen Schrott ist (habe auf der Gentoo-Kiste die Apps nicht in den Standardpfaden) passen wir mal die entsprechenden Werte an:

Original Makefile (nur der wichtige Bereich):

Code: Select all

[...]
APXS=apxs
APACHECTL=apachectl

[...]

#DEF=-Dmy_define=my_value
#INC=-Imy/include/dir
#LIB=-Lmy/lib/dir -lc -lmylib
LIB=-lmysqlclient
[...]
Und so passen wir das Teil an:

Code: Select all

[...]
APXS=/opt/apache_1.3.34/bin/apxs
APACHECTL=/opt/apache_1.3.34/bin/apachectl

[...]

#DEF=-Dmy_define=my_value
#INC=-Imy/include/dir
LIB=-L/opt/mysql_max_4.1.14_i686_main/lib -lc
LIB+=-lmysqlclient
[...]
Würde wir nun einen make-Aufruf starten, so würde das wie folgt aussehen:

Code: Select all

# make
/opt/apache_1.3.34/bin/apxs -c   -lmysqlclient mod_sqlinclude.c
gcc -DLINUX=22 -DHAVE_SET_DUMPABLE -DNO_DBM_REWRITEMAP -DUSE_HSREGEX -fpic -DSHARED_MODULE -I/opt/apache_1.3.34/include  -c mod_sqlinclude.c
mod_sqlinclude.c:34:25: mysql/mysql.h: No such file or directory
mod_sqlinclude.c:70: error: syntax error before "MYSQL"
[...]
Also, was hab ich vergessen? Genau, die MySQL-Includes zu linken =>

Code: Select all

# mkdir mysql && ln -sf /opt/mysql_max_4.1.14_i686_main/include/* ./mysql/
So, bisher dachte ich eigentlich, dass es korrekt sei ... ABER: es ist irgendwo was falsch:

Code: Select all

# make
/opt/apache_1.3.34/bin/apxs -c   -lmysqlclient mod_sqlinclude.c
gcc -DLINUX=22 -DHAVE_SET_DUMPABLE -DNO_DBM_REWRITEMAP -DUSE_HSREGEX -fpic -DSHARED_MODULE -I/opt/apache_1.3.34/include  -c mod_sqlinclude.c
mod_sqlinclude.c:34:25: mysql/mysql.h: No such file or directory
mod_sqlinclude.c:70: error: syntax error before "MYSQL"
[...]
Zur Aufklärung:

Code: Select all

# dir ./
total 56
drwxr-xr-x   3 1001 1001  4096 Mar 20 09:40 .
drwxr-xr-x  38 root root  4096 Mar 20 09:32 ..
-rw-r--r--   1 root root  2071 Feb 13  2002 CHANGES.txt
-rw-r--r--   1 root root   262 Feb 13  2002 LICENSE.txt
-rw-r--r--   1 root root  1315 Mar 20 09:38 Makefile
-rw-r--r--   1 root root 11127 Jan 20  2002 README.txt
-rw-r--r--   1 root root 13160 Feb 13  2002 mod_sqlinclude.c
drwxr-xr-x   2 root root  4096 Mar 20 09:40 mysql
-rw-r--r--   1 root root   667 Jan 14  2002 test.sql
#
# dir ./mysql
total 8
drwxr-xr-x  2 root root 4096 Mar 20 09:40 .
drwxr-xr-x  3 1001 1001 4096 Mar 20 09:40 ..
[...]
lrwxrwxrwx  1 root root   47 Mar 20 09:40 mysql.h -> /opt/mysql_max_4.1.14_i686_main/include/mysql.h
[...]
Da ich allerdings nicht weiterhin Zeit mit diesem Problem verschei**** wollte, hab ich kurzer Hand in der mod_sqlinclude.c folgendes abgeändert:

Code: Select all

[...]
#include <mysql/mysql.h>
[...]
So angepasst und danach erneut einen make ausgeführt:

Code: Select all

[...]
#include </opt/mysql_max_4.1.14_i686_main/include/mysql.h>
[...]

Code: Select all

# make
/opt/apache_1.3.34/bin/apxs -c -L/opt/mysql_max_4.1.14_i686_main/lib  -lmysqlclient mod_sqlinclude.c
gcc -DLINUX=22 -DHAVE_SET_DUMPABLE -DNO_DBM_REWRITEMAP -DUSE_HSREGEX -fpic -DSHARED_MODULE -I/opt/apache_1.3.34/include  -c mod_sqlinclude.c
gcc -shared -o mod_sqlinclude.so mod_sqlinclude.o -L/opt/mysql_max_4.1.14_i686_main/lib -lc -lmysqlclient
/usr/lib/gcc-lib/i386-pc-linux-gnu/3.3.5-20050130/../../../../i386-pc-linux-gnu/bin/ld: warning: creating a DT_TEXTREL in object.
#
Was zum Geier bedeutet das? *derweilmalgoogle*.
Last edited by djcrackman on 2006-03-21 21:35, edited 1 time in total.

ephigenie
Posts: 68
Joined: 2006-01-12 17:01

Re: 'cannot find -lmysqlclient' ... Klappe die x'te ... [edit #3]

Post by ephigenie »

hier gibts infos dazu - aber es ist lediglich ein Warning - mod_sqlinclude sollte wohl gehen...
http://72.14.207.104/linux?q=cache:93xR ... clnk&cd=10

djcrackman
Posts: 207
Joined: 2005-06-02 11:58

Re: 'cannot find -lmysqlclient' ... Klappe die x'te ... [edit #3]

Post by djcrackman »

Danke für den Link ... ohne zu Wissen ob es funktioniert, hab ich das Modul einfach mal in den Apache eingebunden:

Code: Select all

[...]

LoadModule sqlinclude_module  libexec/mod_sqlinclude.so

[...]

SQL_ServerName localhost
SQL_ServerPort 3306
SQL_SQLUser user
SQL_SQLPassword pwd
SQL_UseNameColumn On

SQL_Include "SELECT test FROM db.tbl"
Eine config-Überprüfung fällt leider immer wieder negativ aus:

Code: Select all

# /opt/apache_1.3.34/bin/apachectl configtest
[Tue Mar 21 13:17:43 2006] [error] SQLInclude: Querying data from SQL base: FAILED...
Syntax OK
MySQL User und Passwort stimmen definitiv, an dem scheiterts also nicht ... irgendjemand eine Idee wie eine etwas aussagekräftigere Fehlermeldung erhalten kann?

==== edit #1 ====

Hab mich nun ein Wenig durch den C-Source gelesen -> laut diesem soll es die Funktion SQL_Verbose (0-5) geben, diese wird jedoch ignoriert und ich erhalte nach wie vor nur die Meldung bzgl FAILED.

ephigenie
Posts: 68
Joined: 2006-01-12 17:01

Re: 'cannot find -lmysqlclient' ... Klappe die x'te ... [edit #3]

Post by ephigenie »

hm das ist schon ein wenig Strange...

Ein Freund von mir hat sich auch mal ein wenig näher damit befasst,
da ich mod_sqlinclude ebenfalls auf Debian/Stable (also apache 1.33) einsetze... und vorhatte, es mal mit apache2 zu versuchen ...

Bei mir kompilierte das Modul relativ schmerzfrei (auch mit libmysqlclient14 (also 4.1) ) allerdings halt nicht mit max-

http://www.nerdbynature.de/bits/mod_sqlinclude/

Allerdings das der Query fehlschlägt kann ganz andere Ursachen haben - hast du mal mit strace geschaut ?

Es könnte ja auch sein, dass irgendwie nicht der richtige Socket o.ä.
genommen wird (probier mal 127.0.0.1 statt localhost)
Bei Localhost versucht libmysqlclient meist einen gültigen Socket zu finden...

djcrackman
Posts: 207
Joined: 2005-06-02 11:58

Re: 'cannot find -lmysqlclient' ... Klappe die x'te ... [edit #3]

Post by djcrackman »

Danke für den Tipp betreffend strace ...

Lustige Sache: Egal ob das Modul eingebaut ist oder nicht, strace liest exakt 202 Zeilen Output. Einmal mit mod_sqlinclude:

Code: Select all

[...]
Line 186: rt_sigaction(SIGINT, {0x800428f0, [], 0}, {SIG_DFL}, 8) = 0
Line 187: waitpid(-1, [Tue Mar 21 20:41:00 2006] [error] SQLInclude: Querying data from SQL base: FAILED...
Line 188: Syntax OK
[...]
Einmal ohne mod_sqlinclude:

Code: Select all

[...]
Line 186: rt_sigaction(SIGINT, {0x800428f0, [], 0}, {SIG_DFL}, 8) = 0
Line 187: waitpid(-1, Syntax OK
Line 188: [{WIFEXITED(s) && WEXITSTATUS(s) == 0}], 0) = 6586
[...]
Ich denk ich zieh mir jetzt mal nen älteren Apache und probiers damit nochmal *grübel* ...

==== edit #1 ====

Gut, das mit dem älteren Apache knick ich wieder ... der hier hats ja auch mit dem 1.3.34 zusammen gebracht: http://phpinfo.celeonet.fr/

==== edit #2 ====

@eqhigenie Danke für den Tipp bzgl MySQL-Max ;). Nachdem ich mir auch noch die -f Ausgaben von strace zu Gemüte geführt hatte, habe ich folgendes entdeckt: Das Modul ignoriert die Config-Angabe SQL_SQLUser (zumindest scheint es so) ... in meinem MySQL-Logfile scheint nämlich der User sqlinclude ohne Passwort auf (was wiederrum bedeutet, dass er auch SQL_SQLPassword ignoriert ...). Zumindest weiß ich nun, wo ich ansetzen muss, um den Fehler zu finden ;). Danke

ephigenie
Posts: 68
Joined: 2006-01-12 17:01

Re: 'cannot find -lmysqlclient' ... Klappe die x'te ... [edit #3]

Post by ephigenie »

Achja - was mir noch grad eingefallen ist ...

hast du noch andere Module mit mysql support im apache ?
Ich hatte da auch mal eine sehr komische Geschichte mit mod_sqlinclude, mod_auth_mysql + mod_log_sql ...

Die waren bei mir doch glatt alle gegen unterschiedliche libmysqlclient's gelinkt ... (10, 12, 14 )
allerdings kamen die damit irgendwie nicht klar ...
Ich kam nicht drumherum alles neu zu übersetzen mit libmysqlclient14 -

warum authentifizierungen fehlschlagen könnten könnte auch am Protokoll liegen (es gab eine Änderung im Auth-Protokoll zwischen 12 und 14 )
man kann normalerweise die mysql zwingen per config-value in der my.cnf die alte Authentifizierung zuzulassen ...

Schau doch bitte mal, welche libmysqlclient's alle vom apache geöffnet werden ...
lsof |grep libmysql

djcrackman
Posts: 207
Joined: 2005-06-02 11:58

Re: 'cannot find -lmysqlclient' ... Klappe die x'te ... [edit #3]

Post by djcrackman »

Habe ansonsten definitiv keine Module im Apache, welche auf *SQL zurück greifen. Da ich ehrlich gesagt mittlerweile keine Motivation mehr habe, den Fehler zu suchen (ich denk das ist verständlich :D) habe ich die Zugangsdaten in den c-Source eingetragen und fix in das Modul einkompiliert. Dennoch danke.

djcrackman
Posts: 207
Joined: 2005-06-02 11:58

Re: 'cannot find -lmysqlclient' ... Klappe die x'te ... [edit #3]

Post by djcrackman »

Grundsatzfrage: das Ding sollte doch "on the fly" die VHosts aus der Datenbank lesen, oder hab ich was falsch verstanden?

ephigenie
Posts: 68
Joined: 2006-01-12 17:01

Re: 'cannot find -lmysqlclient' ... Klappe die x'te ... [edit #3]

Post by ephigenie »

falsch verstanden - nur beim start bzw. graceful ...

aber da hab ich für apache2 etwas gesehen, was dir mehr zusagen dürfte ...


http://www.outoforder.cc/projects/apache/mod_vhost_dbi/

hier gibts wirklich "echtzeit"

djcrackman
Posts: 207
Joined: 2005-06-02 11:58

Re: 'cannot find -lmysqlclient' ... Klappe die x'te ... [edit #3]

Post by djcrackman »

Das Ding kenn ich bereits ... bekomm ich aber nicht zum Laufen:

Code: Select all

[Wed Mar 22 10:41:57 2006] [emerg] [mod_dbi_pool.c] - Initlialization of libdbi with default driver directory failed
Configuration Failed
/opt/libdbi_0.8.1/lib/dbd/libdbdmysql.so: undefined symbol: compress
libdbi: Failed to load driver: /opt/libdbi_0.8.1/lib/dbd/libdbdmysql.so
*simsalabim* Ich denke ich werd bei mod_sqlinclude bleiben und halt sporadisch mal nen graceful absetzen ... sollte kein Problem darstellen.