- 3D-Druck Einstieg und Tipps         
Seite 1 von 2 12 LetzteLetzte
Ergebnis 1 bis 10 von 17

Thema: Linker meldet: /main.c:10: undefined reference to `test_init

  1. #1
    Neuer Benutzer Öfters hier
    Registriert seit
    12.09.2007
    Beiträge
    19

    Linker meldet: /main.c:10: undefined reference to `test_init

    Anzeige

    LiFePo4 Akku selber bauen - Video
    Hallo liebe C Gemeinde,

    ich habe ein Problem beim Linken meines Programmes mit extern deklarierten Funktionen. (siehe attachement)

    Meldung:
    Linking: main.elf
    avr-gcc -mmcu=atmega8 -I. -gdwarf-2 -DF_CPU=8000000UL -Os -funsigned-char -funsigned-bitfields -fpack-struct -fshort-enums -Wall -Wstrict-prototypes -Wa,-adhlns=main.o -std=gnu99 -Wundef -MMD -MP -MF .dep/main.elf.d main.o --output main.elf -Wl,-Map=main.map,--cref -lm
    main.o: In function `main':
    main.c:10: undefined reference to `test_init'
    make.exe: *** [main.elf] Error 1

    wo liegt der Hund begraben...?

    Danke, Jeronnimo
    Angehängte Dateien Angehängte Dateien

  2. #2
    Erfahrener Benutzer Robotik Einstein
    Registriert seit
    08.05.2005
    Ort
    Issum
    Alter
    52
    Beiträge
    2.236
    Übersetzt Du denn auch die test.c ?

    Wie sieht denn Makefile aus ?
    Software is like s e x: its better when its free.
    Linus Torvald

  3. #3
    Neuer Benutzer Öfters hier
    Registriert seit
    12.09.2007
    Beiträge
    19
    Hier das makefile:
    Angehängte Dateien Angehängte Dateien

  4. #4
    Erfahrener Benutzer Robotik Einstein
    Registriert seit
    08.05.2005
    Ort
    Issum
    Alter
    52
    Beiträge
    2.236
    Hab mir schon gedacht...
    füg mal nach
    Code:
    # List C source files here. (C dependencies are automatically generated.)
    SRC = $(TARGET).c
    Code:
    SRC += test.c
    ein, dann klappt es auch .

    Gruß Sebastian
    Software is like s e x: its better when its free.
    Linus Torvald

  5. #5
    Neuer Benutzer Öfters hier
    Registriert seit
    12.09.2007
    Beiträge
    19
    Hallo Sebastian,

    jetzt meldet der Linker:

    Linking: main.elf
    avr-gcc -mmcu=atmega8 -I. -gdwarf-2 -DF_CPU=8000000UL -Os -funsigned-char -funsigned-bitfields -fpack-struct -fshort-enums -Wall -Wstrict-prototypes -Wa,-adhlns=test.o -std=gnu99 -Wundef -MMD -MP -MF .dep/main.elf.d test.o --output main.elf -Wl,-Map=main.map,--cref -lm
    c:/programme/winavr/bin/../lib/gcc/avr/4.1.2/../../../../avr/lib/avr4/crtm8.o: In function `__vectors':
    ../../../../../avr-libc-1.4.6/crt1/gcrt1.S:51: undefined reference to `main'
    make.exe: *** [main.elf] Error 1

    Danke für Deinen Input!

    Gruß Je

  6. #6
    Erfahrener Benutzer Robotik Einstein
    Registriert seit
    08.05.2005
    Ort
    Issum
    Alter
    52
    Beiträge
    2.236
    O weh,
    ich habe mir mal Deine test.h angeschaut, warum wird die test_init() als extern deklariert ?

    Ich schaue eben moment
    Software is like s e x: its better when its free.
    Linus Torvald

  7. #7
    Erfahrener Benutzer Robotik Einstein
    Registriert seit
    08.05.2005
    Ort
    Issum
    Alter
    52
    Beiträge
    2.236
    So nachdem ich global.h entfernt habe wird dieses 'Projekt' kompilert,
    bis auf eine Warnung daß Du kein Newline am Ende von main.c hast.

    Entweder postest Du das ganze Programm, oder kann ich Dir nicht helfen, sorry.

    Gruß Sebastian
    Software is like s e x: its better when its free.
    Linus Torvald

  8. #8
    Neuer Benutzer Öfters hier
    Registriert seit
    12.09.2007
    Beiträge
    19
    @Sebastian:

    Hab deas "Problem" dank Deiner Hilfe gelöst. Ich hatte Dich so verstanden die zwei Zeilen im Makefile gegeneinander auszutauschen, daher die erneute Fehlermeldung (mein Fehler). Mit beiden Zeilen hintereinander tut der Linker anstandslos seinen Dienst.

    SRC = $(TARGET).c
    SRC += test.c

    Besten Dank, Jeronnimo

  9. #9
    Erfahrener Benutzer Robotik Visionär Avatar von 021aet04
    Registriert seit
    17.01.2005
    Ort
    Niklasdorf
    Alter
    36
    Beiträge
    5.056
    Der Thread ist zwar schon älter, wollte aber keinen neuen Thread aufmachen.
    Habe ein ähnliches Problem, aber bei mir fehlt der Eintrag "# List C source files here. (C dependencies are automatically generated.)
    SRC = $(TARGET).c "
    Ich habe nicht den Mega8 sondern den Mega32. Die Makefile hänge ich einmal an.

    Ich verwende die AVRlib (nicht avrlibc). Es war eine makefile bei einem Beispiel dabei (hochgeladen als makefile_2), hat aber nichts genutzt. Ich habe Versuchsweiße in die Original Makefile den Ausschnitt
    Code:
    	
    ########### you should not need to change the following line #############
    include $(AVRLIB)/make/avrproj_make
    		  
    ###### dependecies, add any dependencies you need here ###################
    #  Dependencies tell the compiler which files in your code depend on which
    #  other files.  When you change a piece of code, the dependencies allow
    #  the compiler to intelligently figure out which files are affected and
    #  need to be recompiled.  You should only list the dependencies of *.o 
    #  files.  For example: uart.o is the compiled output of uart.c and uart.h
    #  and therefore, uart.o "depends" on uart.c and uart.h.  But the code in
    #  uart.c also uses information from global.h, so that file should be listed
    #  in the dependecies too.  That way, if you alter global.h, uart.o will be
    #  recompiled to take into account the changes.
    
    buffer.o	: buffer.c		buffer.h
    uart.o		: uart.c		uart.h		global.h
    UART2.o		: UART2.c		UART2.h		global.h
    rprintf.o	: rprintf.c		rprintf.h
    a2d.o		: a2d.c			a2d.h
    timer.o		: timer.c		timer.h		global.h
    pulse.o		: pulse.c		pulse.h		timer.h		global.h
    lcd.o		: lcd.c			lcd.h		global.h
    i2c.o		: i2c.c			i2c.h		global.h
    spi.o		: spi.c			spi.h		global.h
    swpwm.o		: swpwm.c		swpwm.h		global.h
    servo.o		: servo.c		servo.h		global.h
    swuart.o	: swuart.c		swuart.h	global.h
    tsip.o		: tsip.c		tsip.h		global.h
    nmea.o		: nmea.c		nmea.h		global.h
    vt100.o		: vt100.c		vt100.h		global.h
    gps.o		: gps.c			gps.h		global.h
    $(TRG).o	: $(TRG).c		global.h
    eingefügt, ohne Erfolg.

    In der C-Datei steht
    Code:
    #include <a2d.h>
    int main(void)
    {
    	a2dInit();
    	a2dSetReference(ADC_REFERENCE_AREF);
    .....
    }
    In der Headerdatei steht
    Code:
    #define ADC_REFERENCE_AREF		0x00	///< 0x00 -> AREF pin, internal VREF turned off
    void a2dInit(void);
    void a2dSetReference(unsigned char ref);
    Eine a2d.c ist auch dabei, die ich mit der makefile-Datei mit einbinden wollte, ohne Erfolg.
    Hat einer einen Vorschlag, was ich noch versuchen könnte?

    MfG Hannes
    Angehängte Dateien Angehängte Dateien

  10. #10
    Erfahrener Benutzer Robotik Visionär Avatar von 021aet04
    Registriert seit
    17.01.2005
    Ort
    Niklasdorf
    Alter
    36
    Beiträge
    5.056
    Hat keiner eine Idee? Die Beispiele funktionieren auch nicht, es sind allerdings keine APS (Projekt) Dateien dabei sondern nur Makefile, C Dateien und einige weitere Dateien.

    MfG Hannes

Seite 1 von 2 12 LetzteLetzte

Berechtigungen

  • Neue Themen erstellen: Nein
  • Themen beantworten: Nein
  • Anhänge hochladen: Nein
  • Beiträge bearbeiten: Nein
  •  

Labornetzteil AliExpress