Moin,
ich benoetige fuer die Statistik-Software R einige Makros,
teilweise funktionieren sie auch. Die Makros sind normale C-Shared-Libraries,
ich habe sie mit
gcc -c -fPIC -I/usr/include/mysql/ bestInfektTage.c
gcc -shared -o libbestInf.so bestInfektTage.o
compiliert. Es gab auch kein Fehler während des Kompilierens.
Nun habe ich ein Makro erstellt, welches auf eine Datenbank zuhreifen soll und
in R gibt es beim Laden des Makros folgenden Fehler
> dyn.load("/home/henzef/r_Programme/libbestInf.so",local=TRUE, now=TRUE)
Error in dyn.load(x, as.logical(local), as.logical(now)) :
unable to load shared library "/home/henzef/r_Programme/libbestInf.so":
/home/henzef/r_Programme/libbestInf.so: undefined symbol: mysql_fetch_row
>
Es wird die Funktion mysql_fetch_row nicht erkannt,
allerdings werden andere Funktionen wie z.B. mysql_use_result
erkannt. WARUM?
Bei Bedarf kann ich auch noch den C-Code zeigen.
Danke
Matthias
Fehler in C-Makro
Hi,
so kannst du fehlende funktionen oder daten objekte herausfinden
[/code]
so kannst du fehlende funktionen oder daten objekte herausfinden
Code: Alles auswählen
ldd -r /home/henzef/r_Programme/libbestInf.so
nun diese funktion "mysql_fetch_row" ist höchst wahrscheinlich in irgend einer library (shared library) enthalten, so wie dein "makro" in deiner libbestInf.so, wenn der loader aber nicht weis in welcher, bricht er den ladevorgang mit so einer fehlermeldung ab.
diese information die der loader benötigt, wird beim linken in das modul eingetragen, sofern dies information dem linker bekannt ist.
damit der linker weis, welche libraries er nach dieser funktion durchsuchen soll, mußt du die entsprechenden libraries beim linken ( also bei gcc -shared -o libbestInf.so bestInfektTage.o) angeben.
ich habe zwar sehr viel mit datenbank programmierung zu tun, aber leider nur mit properitären (db2,oracle, sqlserver,...), daher habe ich leider auch keine ahnung welche libraries du dazu linken mußt
diese information die der loader benötigt, wird beim linken in das modul eingetragen, sofern dies information dem linker bekannt ist.
damit der linker weis, welche libraries er nach dieser funktion durchsuchen soll, mußt du die entsprechenden libraries beim linken ( also bei gcc -shared -o libbestInf.so bestInfektTage.o) angeben.
ich habe zwar sehr viel mit datenbank programmierung zu tun, aber leider nur mit properitären (db2,oracle, sqlserver,...), daher habe ich leider auch keine ahnung welche libraries du dazu linken mußt
Moin nochma,
wieder tausend Dank fuer die schnelle Antwort,
Mit
gcc -c -fPIC -I/usr/include/mysql/ bestInfektTage.c
gcc -shared -o libbestInf.so bestInfektTage.o -L/usr/lib/mysql -lmysqlclient
hat es nun funktioniert.
ENTSCHULDIGE nocheinmal,
haette man auch durch lesen herausbekommen koennen.
Vielen Tausend DANK,
Matthias
wieder tausend Dank fuer die schnelle Antwort,
Mit
gcc -c -fPIC -I/usr/include/mysql/ bestInfektTage.c
gcc -shared -o libbestInf.so bestInfektTage.o -L/usr/lib/mysql -lmysqlclient
hat es nun funktioniert.
ENTSCHULDIGE nocheinmal,
haette man auch durch lesen herausbekommen koennen.
Vielen Tausend DANK,
Matthias