Hallo,
ich suche jetzt schon seit 2 Stunden rum und finde keine Antwort auf
folgendes Problem:
1 | $ make all
|
2 | avr-gcc -I. -g -mmcu=atmega168 -O0 -fpack-struct -fshort-enums -funsigned-bitfields -funsigned-char -Wall -Wstrict-prototypes -Wa,-ahlms=Wire/utility/twi.lst -c Wire/utility/twi.c -o Wire/utility/twi.o
|
3 | avr-gcc -I. -g -mmcu=atmega168 -O0 -fpack-struct -fshort-enums -funsigned-bitfields -funsigned-char -Wall -Wstrict-prototypes -Wa,-ahlms=lcdlibrary/lcd.lst -c lcdlibrary/lcd.c -o lcdlibrary/lcd.o
|
4 | avr-gcc -I. -g -mmcu=atmega168 -O0 -fpack-struct -fshort-enums -funsigned-bitfields -funsigned-char -Wall -Wstrict-prototypes -Wa,-ahlms= -fno-exceptions -Wa,-ahlms=main.lst -c main.cpp -o main.o
|
5 | cc1plus: Warnung: Kommandozeilenoption "-Wstrict-prototypes" ist gültig für Ada/C/ObjC, aber nicht für C++
|
6 | avr-gcc -I. -g -mmcu=atmega168 -O0 -fpack-struct -fshort-enums -funsigned-bitfields -funsigned-char -Wall -Wstrict-prototypes -Wa,-ahlms= -fno-exceptions -Wa,-ahlms=Wire/Wire.lst -c Wire/Wire.cpp -o Wire/Wire.o
|
7 | cc1plus: Warnung: Kommandozeilenoption "-Wstrict-prototypes" ist gültig für Ada/C/ObjC, aber nicht für C++
|
8 |
|
9 | avr-gcc -Wl,-Map,myproject.out.map -mmcu=atmega168 -lm -o myproject.out ./Wire/utility/twi.o ./lcdlibrary/lcd.o main.o ./Wire/Wire.o
|
10 | main.o: In function `main':
|
11 | /home/fastred/Entwicklung/twi_echo_cpp2/main.cpp:21: undefined reference to `lcd_init(unsigned char)'
|
12 | make: *** [myproject.out] Fehler 1
|
Die Quellen werden anstandslos übersetzt, die Fehlermeldung sagt mir,
dass der Linker die lcd_init() nicht findet, richtig?
Die lcd.o ist im Unterverzeichnis (./lcdlibrary/) vorhanden/erzeugt
worden.
Meine main.cpp sieht so aus:
1 | #include "./Wire/Wire.h"
|
2 | #include <avr/interrupt.h>
|
3 | #include "./lcdlibrary/lcd.h"
|
4 |
|
5 | int main(void)
|
6 | {
|
7 | i=0;
|
8 |
|
9 | sei();
|
10 | [...]
|
11 | Wire.onReceive(receiveEvent); // register event
|
12 | lcd_init(LCD_DISP_ON);
|
13 | for(;;){ }
|
14 | return 0;
|
15 | }
|
Der entsprechende Abschnitt in dem Makefile:
1 | PRJSRC=main.cpp ./Wire/Wire.cpp
|
2 | PRJSRC+= ./Wire/utility/twi.c ./lcdlibrary/lcd.c
|
Hat jemand eine Idee, was ich übersehen haben könnte ?
Was mir schleierhaft ist, warum z.b. die Wire.cpp oder die twi.c
anstandslos gelinkt wird, obwohl die identisch hinzugefügte lcd-lib (die
von p.fleury) nicht. grrr
Dank im Vorraus!