PDA

Archiv verlassen und diese Seite im Standarddesign anzeigen : benötigte Libraries finden



GhoulLord
06-06-2003, 10:57
Nabend!

So, me quält sich schon seit zwei Tagen mit folgender Frage (und ich hab auf einigen Website, mans, --helps gesucht *GRR*):

Wie bekomme ich heraus, welche libraries ein Programm benötigt?

Folgendes Programm:

########## peng.c ##########

#include <mysql.h>
#include <stdio.h>

static MYSQL *conn;

int main(int argc, char *argv[]) {

conn = mysql_init(NULL);

return 0;
}

##########

Wenn ich diesen source unter ner pentium/suse8.2 Kiste mit

gcc -Wall peng.c -o peng -I/mysql/include -L/mysql/lib -lm -lz -lmysqlclient

kompilier, dann ist alles in Butter!

Wenn ich des aber auf ner Alpha/RedHat7.1 Maschine mache, dann kommen zig "undefined references"!

Ich bekomm noch en Hals!:mad:

als Beispiel:

/mysql/lib/libmysqlclient.a(libmysql.o): In function `mysql_free_result':
libmysql.o(.text+0x1750): undefined reference to `_OtsMove'

oder:

/mysql/lib/libmysqlclient.a(password.o): In function `my_rnd':
password.o(.text+0xe4): undefined reference to `_OtsRemainder64Unsigned'

( wo die herkommen, gibts noch mehr, viel mehr davon :D )

Könnte mir jemand diese Fehlermeldung mal bitte aufschlüssel, damit ich des beim next mal selber korrigieren kann!?

password.o ist also in libmysqlclient.a eingebettet!?
da gibts ne function my_rnd
und die benutzt ne function aus einer anderen lib, und der compiler(?) hat dieser Funktion den namen _OtsRemainder64Unsigned gegeben?
und der arme Linker weiss nun nicht, wo er das herbekommen soll!

nur: wie soll ich des denn wissen, wo diese funktion definiert ist?:confused:

MfG
GhoulLord

peschmae
06-06-2003, 13:10
hallo,

ich glaub nicht, dass es sowas gibt

falls du aber irgendwo schon ein Programm hast, das vermutlich dieselben Bibliotheken benötigt, kannst du ldd verwenden, aber sonst...

MfG Peschmä

anda_skoa
06-06-2003, 14:12
Eventuell liegt es an der Reihenfolge der Libs. Probier mal -l nach -lmysqlclient

Ciao,
_

GhoulLord
06-06-2003, 14:35
Schade, hab ich schon probiert, kein Erfolg.
Da ich auf dem alpha-System kein libmysqlclient.so.* finde, wie kann ich dem compiler denn sagen, dass ich des prog bitte statisch gelinkt haben möchte?

anda_skoa
06-06-2003, 15:17
Original geschrieben von GhoulLord
Schade, hab ich schon probiert, kein Erfolg.
Da ich auf dem alpha-System kein libmysqlclient.so.* finde, wie kann ich dem compiler denn sagen, dass ich des prog bitte statisch gelinkt haben möchte?

Wenn die statische lib existiert und die dynamische nicht, wird normalerweise automatisch die statische genommen.

Aber du kannst mit -static -lmysqlclient -dynamic die Verwendung der libmysqlclient.a erzwingen.

Wurde die libmysqlclient auch auf dem selben System mit dem selben Compiler compiliert?

Ciao,
_