logo elektroda
logo elektroda
X
logo elektroda
REKLAMA
REKLAMA
Adblock/uBlockOrigin/AdGuard mogą powodować znikanie niektórych postów z powodu nowej reguły.

Jaka biblioteka do operacji matematycznych w Eclipse/GnuArm?

chomiczuk 25 Sty 2007 13:12 2043 5
REKLAMA
  • #1 3485746
    chomiczuk
    Poziom 11  
    Posty: 30
    Ocena: 1
    Witam. Wykonywanie operacji takich jak mnożenie czy dzielenie w Eclipse/GnuArm powoduje wyrzucenie błędów np(undefined reference to `__floatsisf' ...). Jaką bibliotekę należy dołączyć do projektu, aby można było wykonywać powyższe operacje. Dodam że w WinArm czy Keilu program kompiluje się bez problemu, tam nie potrzeba dołączać bibliotek.Zapewne podane są ściezki dostępu do bibliotek.

    Dodano po 2 [godziny] 25 [minuty]:

    Jak przypuszczam za to odpowiada libm.a, tylko jak to dodać do linkera??

    Dodano po 6 [minuty]:

    Pomyłka raczej miało być libc.a.
  • REKLAMA
  • #2 3486432
    TWl
    Poziom 21  
    Posty: 337
    Pomógł: 42
    Ocena: 133
    A z jakimi bibliotekami linkujesz projekt?

    Takie cos powinno dzialac:
    arm-elf-gcc -mcpu=PROCESOR -o projekt.elf -nostartfiles plik1.o plik2.o -lc -lm -T skrypt_linkera.ld
  • REKLAMA
  • #3 3487033
    adamusx
    Poziom 27  
    Posty: 977
    Pomógł: 94
    Ocena: 28
    W C to chyba standardowa jest math.h wiec sporbuj dolaczyc ta bibliotekę. WinAVR i WinARMie działa.
  • REKLAMA
  • #4 3487605
    chomiczuk
    Poziom 11  
    Posty: 30
    Ocena: 1
    Dołączałem już math.h float.h i dalej to nie pomaga, problem chyba tkwi w odpowiednim użyciu bibliotek newlib. Poniżej umieszczam mój makefile:
    
    NAME   = demo2148_blink_flash
    
    CC      = arm-elf-gcc
    LD      = arm-elf-ld -v
    AR      = arm-elf-ar
    AS      = arm-elf-as
    CP      = arm-elf-objcopy
    OD		= arm-elf-objdump
    
    CFLAGS  = -I./ -c -fno-common -O0 -g
    AFLAGS  = -ahls -mapcs-32 -o crt.o
    LFLAGS  =  -Map main.map -Tdemo2148_blink_flash.cmd
    CPFLAGS = -O ihex
    ODFLAGS	= -x --syms
    
    all: test
    
    clean:
    	-rm crt.lst main.lst crt.o main.o main.out main.hex main.map main.dmp
    
    test: main.out
    	@ echo "...copying"
    	$(CP) $(CPFLAGS) main.out main.hex
    	$(OD) $(ODFLAGS) main.out > main.dmp
    
    main.out: crt.o main.o demo2148_blink_flash.cmd 
    	@ echo "..linking"
    	$(LD) $(LFLAGS) -o main.out  crt.o main.o
    
    crt.o: crt.s
    	@ echo ".assembling"
    	$(AS) $(AFLAGS) crt.s > crt.lst
    
    main.o: main.c
    	@ echo ".compiling"
    	$(CC) $(CFLAGS) main.c
    

    wydaje mi sie że w jakis sposób należy dołączyc bibliotekę libc.a, tylko mi się nie udaje. Póbowałem już:
    
    ...
    $(LD) $(LFLAGS) -o main.out  crt.o main.o -L lib\
    ...
    

    Natomiast też to nie pomaga.
  • REKLAMA
  • Pomocny post
    #5 3487795
    TWl
    Poziom 21  
    Posty: 337
    Pomógł: 42
    Ocena: 133
    chomiczuk napisał:
    Dołączałem już math.h float.h i dalej to nie pomaga, problem chyba tkwi w odpowiednim użyciu bibliotek newlib.


    Poprzedni post mogl wprowadzic Cie w blad. math.h to nie jest zadna biblioteka tylko plik naglowkowy - zawiera on miedzy innymi prototypy funkcji matematycznych, definicje typow danych i stalych. Biblioteka odpowiadajaca za funkcje matematyczne jest libm.a, zas za funkcje zwiazane z emulacja zmiennego przecinka - libgcc.a i/lub libg.a.

    Funkcja, ktorej linker nie moze znalezc (__floatsisf) to operator konwersji
    z floata na int i znajduje sie w libgcc.a. Biblioteka ta musi byc praktycznie zawsze linkowana z projektem.

    
    
    main.out: crt.o main.o demo2148_blink_flash.cmd 
    	@ echo "..linking"
    	$(LD) $(LFLAGS) -o main.out  crt.o main.o
    
    

    sprobuj tak:
    
    main.out: crt.o main.o demo2148_blink_flash.cmd 
    	@ echo "..linking"
    	$(CC) -o main.out crt.o main.o -nostartfiles -Tdemo2148_blink_flash.cmd 
    
    

    Nie uzywaj bezposrednio linkera LD do linkowania, tylko GCC - dolacza on odpowiednie biblioteki. Pamietaj tylko o opcji -nostarfiles, ktora nie linkuje domyslnego kodu startowego.
  • #6 3487963
    chomiczuk
    Poziom 11  
    Posty: 30
    Ocena: 1
    Tak jak kolega TWI napisał zrobiłem, skompilowałem i działa. DZiękuję za pomoc.
REKLAMA