Übersetzt Du denn auch die test.c ?
Wie sieht denn Makefile aus ?
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
Übersetzt Du denn auch die test.c ?
Wie sieht denn Makefile aus ?
Linus TorvaldSoftware is like s e x: its better when its free.
Hier das makefile:
Hab mir schon gedacht...
füg mal nach
Code:# List C source files here. (C dependencies are automatically generated.) SRC = $(TARGET).cein, dann klappt es auch .Code:SRC += test.c
Gruß Sebastian
Linus TorvaldSoftware is like s e x: its better when its free.
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
O weh,
ich habe mir mal Deine test.h angeschaut, warum wird die test_init() als extern deklariert ?
Ich schaue eben moment
Linus TorvaldSoftware is like s e x: its better when its free.
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
Linus TorvaldSoftware is like s e x: its better when its free.
@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
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
eingefügt, ohne Erfolg.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
In der C-Datei steht
In der Headerdatei stehtCode:#include <a2d.h> int main(void) { a2dInit(); a2dSetReference(ADC_REFERENCE_AREF); ..... }
Eine a2d.c ist auch dabei, die ich mit der makefile-Datei mit einbinden wollte, ohne Erfolg.Code:#define ADC_REFERENCE_AREF 0x00 ///< 0x00 -> AREF pin, internal VREF turned off void a2dInit(void); void a2dSetReference(unsigned char ref);
Hat einer einen Vorschlag, was ich noch versuchen könnte?
MfG Hannes
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
Lesezeichen