Fehlermeldung: __gmp_get_memory_functions

Vom einfachen Programm zum fertigen Debian-Paket, Fragen rund um Programmiersprachen, Scripting und Lizenzierung.
Antworten
TOO0M
Beiträge: 19
Registriert: 26.06.2007 20:40:39

Fehlermeldung: __gmp_get_memory_functions

Beitrag von TOO0M » 12.07.2009 12:56:33

hallo
ich habe folgende fehlermeldung beim compilieren erhalten:
Compiling C: ultraschall.c
avr-gcc -c -mmcu=atmega32 -I. -g -DF_CPU=16000000UL -Os -funsigned-char -funsigned-bitfields -fpack-struct -fshort-enums -Wall -Wstrict-prototypes -Wa,-adhlns=./ultraschall.lst -std=gnu99 -Wundef -MMD -MP -MF .dep/ultraschall.o.d ultraschall.c -o ultraschall.o
/usr/lib/gcc/avr/4.3.2/cc1: symbol lookup error: /usr/lib/libmpfr.so.1: undefined symbol: __gmp_get_memory_functions
make: *** [ultraschall.o] Error 1

wenn ich in meinem main programm folgende zeile (adc_p = (double) (4.096/pow(2,resolution)*adc_mittel);) ausblende wird alles einwandfrei compiliert.
der fehler taucht auf wenn die math.h lib eingebunden wird (pow(x,x) funktion).
ich habe im internet schon nach dem fehler ermittelt aber kann leider nicht viel damit anfangen.
kann mir einer erklären wofür die "/usr/lib/libmpfr.so.1" lib datei benötigt wird und wie ich den fehler beseitigen kann.
ich vermute das meine installation vom avr-gcc nicht schlüssig ist.

Mein system ist von debian etch auf lenny geupdatet worden.
ich programmiere unter kdevelop 3.5.

gruß TOO0M

gms
Beiträge: 7798
Registriert: 26.11.2004 20:08:38
Lizenz eigener Beiträge: MIT Lizenz

Re: Fehlermeldung: __gmp_get_memory_functions

Beitrag von gms » 12.07.2009 22:02:30

welche gmp Version verwendest du ( sollte das Paket "libgmp3c2" sein ) ?

dieses Symbol wird in libmpfr.so referenziert und von libgmp.so zur Verfügung gestellt:

Code: Alles auswählen

gms1 ~ # nm /usr/lib64/debug/usr/lib64/libmpfr.so.1.2.0.debug | grep gmp_get_memory
                 U __gmp_get_memory_functions
gms1 ~ # ldd /usr/lib64/libmpfr.so | grep gmp
        libgmp.so.3 => /usr/lib/libgmp.so.3 (0x00007f3d4d976000)
gms1 ~ # nm /usr/lib64/debug/usr/lib64/libgmp
libgmp.so.3.4.4.debug    libgmpxx.so.4.0.4.debug
gms1 ~ # nm /usr/lib64/debug/usr/lib64/libgmp.so.3.4.4.debug | grep gmp_get_memory
0000000000009cfc T __gmp_get_memory_functions
gms1 ~ #   
unter Debian kannst du dir die Symbole in einer ELF Datei z.B so anschauen:

Code: Alles auswählen

root@gms2:/# readelf -s /usr/lib/libgmp.so.3.4.2  | grep memory
    91: 00000000000325a0   113 FUNC    GLOBAL DEFAULT   11 __gmp_asprintf_memory
   253: 0000000000008920    64 FUNC    GLOBAL DEFAULT   11 __gmp_set_memory_function
   255: 00000000000088e0    56 FUNC    GLOBAL DEFAULT   11 __gmp_get_memory_function
vielleicht hilfts, wenn du die Option "-lgmp" zusätzlich angibst

Gruß
gms

TOO0M
Beiträge: 19
Registriert: 26.06.2007 20:40:39

Re: Fehlermeldung: __gmp_get_memory_functions

Beitrag von TOO0M » 17.07.2009 18:19:27

hallo entschuldige meine späte antwort.

die version ist die "libgmp3c2".

habe -lgmp angegeben :

Compiling C: ultraschall.c
avr-gcc -c -mmcu=atmega32 -I. -g -DF_CPU=16000000UL -Os -funsigned-char -funsigned-bitfields -fpack-struct -fshort-enums -Wall -Wstrict-prototypes -lgmp -Wa,-adhlns=./ultraschall.lst -std=gnu99 -Wundef -MMD -MP -MF .dep/ultraschall.o.d ultraschall.c -o ultraschall.o
/usr/lib/gcc/avr/4.3.2/cc1: symbol lookup error: /usr/lib/libmpfr.so.1: undefined symbol: __gmp_get_memory_functions
make: *** [ultraschall.o] Error 1

das ist die ansicht meiner elf datei:

ServerPC:~$ readelf -s /usr/lib/libgmp.so.3.4.2 | grep memory
109: 0003c440 117 FUNC GLOBAL DEFAULT 11 __gmp_asprintf_memory
120: 000098f0 120 FUNC GLOBAL DEFAULT 11 __gmp_set_memory_function
550: 00009890 86 FUNC GLOBAL DEFAULT 11 __gmp_get_memory_function

ich habe die i386 version von debian ich vermute das die libs dann wie folgt zu suchen sind:

ServerPC:~$ nm /usr/lib/debug/usr/lib/libmpfr.so.1.2.0.debug | grep gmp_get_memory
nm: '/usr/lib/debug/usr/lib/libmpfr.so.1.2.0.debug': No such file
ServerPC:~$ ldd /usr/lib/libmpfr.so | grep gmp
ldd: /usr/lib/libmpfr.so: Datei oder Verzeichnis nicht gefunden

aber dort finde ich die angegebenen dateien nicht.
in der dem verzeichnis lib64 steht nur folgendes:
ServerPC:/usr/lib64$ ls
crt0-efi-x86_64.o elf_x86_64_efi.lds libefi.a libfakeroot libgnuefi.a

libfakeroot ist dort das einzigste unterverzeichnis.

ich bin hier an dieser stelle etwas hilflos. wie gesagt ich programmiere unter avr-gcc und kann noch nicht nachvollziehen wie die /usr/lib/libmpfr.so.1 in den compiler vorgang reinspielt. der avr-gcc hat doch nichts mit dem linux gcc zu tun.

gruss TOO0M

Spasswolf
Beiträge: 3472
Registriert: 30.11.2005 10:32:22
Lizenz eigener Beiträge: MIT Lizenz
Wohnort: Wald

Re: Fehlermeldung: __gmp_get_memory_functions

Beitrag von Spasswolf » 17.07.2009 19:36:38

ldd: /usr/lib/libmpfr.so: Datei oder Verzeichnis nicht gefunden
Und was ist mit?

Code: Alles auswählen

ldd /usr/lib/libmpfr.so.1

gms
Beiträge: 7798
Registriert: 26.11.2004 20:08:38
Lizenz eigener Beiträge: MIT Lizenz

Re: Fehlermeldung: __gmp_get_memory_functions

Beitrag von gms » 18.07.2009 00:22:29

TOO0M hat geschrieben: ich bin hier an dieser stelle etwas hilflos. wie gesagt ich programmiere unter avr-gcc und kann noch nicht nachvollziehen wie die /usr/lib/libmpfr.so.1 in den compiler vorgang reinspielt.
der avr-gcc hat doch nichts mit dem linux gcc zu tun.
leider kenne ich diesen Compiler auch nicht, aber bei deinem Aufruf handelt es sich um einen reinen Compiler/Assembler-Vorgang ( wegen der "-c" Option), gelinkt sollte hier eigentlich nicht werden. Daher habe ich eher die Vermutung, daß der Compiler selber diese Library benötigt, wenn er einen speziellen Code übersetzen muß.
Im Grunde sehe ich diese Vermutung
TOO0M hat geschrieben: ich vermute das meine installation vom avr-gcc nicht schlüssig ist.
als bestätigt und eine Neuinstallation vom "avr-gcc" sollte helfen.
TOO0M hat geschrieben: ich habe die i386 version von debian ich vermute das die libs dann wie folgt zu suchen sind:
warum stellst du Vermutungen an, steht doch hier wo die libmpfr.so zu finden ist: :wink:

Code: Alles auswählen

/usr/lib/gcc/avr/4.3.2/cc1: symbol lookup error: /usr/lib/libmpfr.so.1: undefined symbol: __gmp_get_memory_functions
Gruß
gms

TOO0M
Beiträge: 19
Registriert: 26.06.2007 20:40:39

Re: Fehlermeldung: __gmp_get_memory_functions

Beitrag von TOO0M » 18.07.2009 11:59:14

hallo habe in einem englischsprachigem forum die lösung gefunden:

unter ServerPC:/usr/local/lib waren folgende dateien gelistet:
libgmp.a libgmp.la libgmp.so libgmp.so.3 libgmp.so.3.3.3

habe die dateien nach unterverzeichnis "waste" verschoben.

ServerPC:/usr/local/lib/waste$ ls
libgmp.a libgmp.la libgmp.so libgmp.so.3 libgmp.so.3.3.3

anschließend mein projekt neu compiliert. und sie da. fehler weg.
der zusammenhang wieso avr-gcc in diesem verzeichnis versucht irgendwelche zuordnungen aufzulösen ist mir aber immer noch nicht klar.
auch ist mir nicht verständlich wieso in diesem verzeichnis diese dateien stehen und wofür sie benötigt werden?

vielen dank für eure antworten die mir bei der suche nach der lösung sehr geholfen haben.

gruss TOO0M

Spasswolf
Beiträge: 3472
Registriert: 30.11.2005 10:32:22
Lizenz eigener Beiträge: MIT Lizenz
Wohnort: Wald

Re: Fehlermeldung: __gmp_get_memory_functions

Beitrag von Spasswolf » 18.07.2009 12:08:57

Hast du den avr-gcc aus den Debianquellen installiert (Debiangcc-avr)? Wo kommen die verdächtigen Bibliotheken in /usr/local/lib her?

TOO0M
Beiträge: 19
Registriert: 26.06.2007 20:40:39

Re: Fehlermeldung: __gmp_get_memory_functions

Beitrag von TOO0M » 18.07.2009 18:37:09

zu 1.: ja deswegen und noch ein paar anderen gründen habe ich ein update von sarge auf lenny gemacht.
zu 2.: gute frage nächste frage!
gruss TOO0M

Antworten