Elektroda.pl
Elektroda.pl
X
Proszę, dodaj wyjątek www.elektroda.pl do Adblock.
Dzięki temu, że oglądasz reklamy, wspierasz portal i użytkowników.

[SOLVED][C] eclipse CDT, undefined reference

skynet_2 08 Paź 2009 19:55 1817 7
  • #1 08 Paź 2009 19:55
    skynet_2
    Poziom 26  

    Mam takie pytanie dotyczące eclipse, jak można dorzucić do projektu katalog z własnymi bibliotekami ale w postaci źródeł.

    Jak dam Include Patchs

    Code:
    -I/home/skynet/workspace/my_lib
    to owszem podczas wpisywania mam auto-kończenie nazw funkcji, więc eclipse znajduje nagłówki.

    Ale podczas kompilacji wywala mi
    Code:
    undefined reference
    Zazwyczaj po prostu daje dowiązanie symboliczne do katalogu z bibliotekami i po problemie.

    Oczywiście można poprawić make'a ale chyba można to ustawić gdzieś z opcjach?

    0 7
  • #2 08 Paź 2009 20:03
    maciek_slon
    Poziom 29  

    No skoro biblioteka nie jest skompilowana, to chyba jasne że dostajesz undefined reference :-) A żeby była kompilowana musisz dodawać do projektu katalog z bibliotekami (np. prawym na drzewie projektu po lewej, add itp itd). I w zasadzie tyle.

    No, ew. możesz sobie skompilować te biblioteki do postaci libów i dołączać w projekcie tak jak inne.

    0
  • #3 08 Paź 2009 21:21
    skynet_2
    Poziom 26  

    Po dorzuceniu do projektu jako katalog zewnętrzny[drzewko projektu->new->forder->link to filder in the file system] include nie działało, więc dodałem.

    Code:
    -I"${workspace_loc:/test_avr/my_lib}"

    teraz include działa ale nadal mi wywala indefined reference.

    jak przeniosę zlinkowany katalog do katalogu src to oczywiście kompiluje mi wszystkie pliki i rozmiar projektu rośnie, jakby linker dodał wszystko bo jest w zlinkowanym katalogu.

    szkoda że to nie może działać tak jak ze skompilowanymi bibliotekami czyli dołączane[i w moim przypadku kompilowane] są tylko te potrzebne.

    0
  • #4 09 Paź 2009 07:51
    94075
    Użytkownik usunął konto  
  • #5 09 Paź 2009 08:10
    maciek_slon
    Poziom 29  

    albertb napisał:

    Pobieżne przejrzenie pokazuje, że tak samo jak dla kompilatora jest opcja Directories/Include paths (-I)
    tak dla linkera jest Directories/Library(-l) i Directories/Library search path(-L).


    Owszem, o ile autor pytania miałby te pliki skompilowane do postaci biblioteki (.lib, .a, ...) a nie w postaci gołych źródeł :-)

    0
  • #6 09 Paź 2009 08:21
    94075
    Użytkownik usunął konto  
  • #7 09 Paź 2009 13:10
    skynet_2
    Poziom 26  

    Trochę namieszałem, ale już wyjaśniam.

    Chciałbym aby to działało w taki sposób, dołączam poprzez include plik np. rs232.h, kompilator powinien to skompilować[serial.c -> serial.o], później linker powinien dorzucić serial.o do pliku głównego, i tu właśnie jest problem ponieważ jak zrobię dowiązanie symboliczne w katalogu src do katalogu my_lib albo nawet skopiuje potrzebne pliki do katalogu src, to wszystko się kompiluje bez względu na to z których plików korzystam i linker dodaje wszystko go pliku głównego.
    Zastanawiam się dlaczego linkuje się wszystko.

    --> albertb aktualnie próbuje się pozbyć tego dowiązania.

    Ja się nie da to skompiluje do postaci lib.

    0
  • #8 21 Paź 2009 06:29
    skynet_2
    Poziom 26  

    znalazłem rozwiązanie
    http://kwesoly.net/programowanie/avr/usuwanie-nieuzywanych-funkcji-z-programu/

    Code:
    CFLAGS += -ffunction-sections -fdata-sections
    Do linkera
    Code:
    -Wl,-gc-sections


    Code:
    -ffunction-sections         Place each function into its own section
    
    -fdata-sections             Place data items into their own section
    -Wl,option                  Pass option as an option to the linker.
    --gc-sections               Remove unused sections (on some targets)



    Teraz dodaje wszystkie biblioteki do projektu a dzięki flagom wszystko co nie jest używane zostaje wycięte.

    0