Moin!
ich versuche gerade, mehrere Strings im Eeprom zu speichern und von dort
auf einem Display auszugeben.... Nun habe ich folgendes Problem. Mit dem
ersten String klappt alles wie erwartet. Will ich den zweiten String
pcTitle2 aufrufen, so liefert mir der Linker folgenden Fehler
(Linkeraufruf siehe unten):
main.cpp: undefined reference to `PoelControl::pcTitle2'
main.cpp
lcdOut.writeStrgEeprom(pcTitle);
lcdOut.writeStrgEeprom(pcTitle2);
.cpp file:
const char EEMEM pcTitle[] = "Test\0";
const char EEMEM pcTitle2[] = "Dummy\0";
.h file:
const extern char EEMEM pcTitle[];
const extern char EEMEM pcTitle2[];
Ein vertauschen der Variablendeklarationen und -definitionen führt zum
selben Ergebnis (und nicht umgekehrt, wie ich es erwarten würde) Im
*.map-File ist auch nur pcTitle zu finden. Definier ich die Länge der
char-Arrays bringt dies auch nichts....Die Terminierung der Strings mit
\0 kann ich auch weglassen. Gleiches Resultat.
Und nu? Hat jemand ne Idee, was ich da falsch mache?
cu, Michael
-------------------
Controller: AtMega32
Ide: WinAvr (current), Eclipse
Linker Aufruf:
Building target: dogDisplayCpp-I.elf
Invoking: AVR-GCC C++ Linker
avr-g++ -o "dogDisplayCpp-I.elf" ./main.o ./libpoel/tools/Delay.o
./libpoel/tools/OutputTools.o ./libpoel/tools/TimingMgr.o
./libpoel/peripherals/Ad.o ./libpoel/peripherals/Interrupts.o
./libpoel/peripherals/Spi.o ./libpoel/peripherals/Timer.o
./libpoel/peripherals/Usart.o ./libpoel/peripherals/Watchdog.o
./libpoel/drivers/DogSpi.o ./libpoel/drivers/PressSensors.o
./libpoel/drivers/TempSensors.o ./control/PcData.o
./control/PcStrings.o -lm -Wl,-Map=dogDisplayCpp-I.map --cref
--oformat=elf32-avr -mmcu=atmega32
./main.o: In function `showIntro()':
main.cpp:(.text+0x72): undefined reference to `PoelControl::pcTitle2'
main.cpp:(.text+0x74): undefined reference to `PoelControl::pcTitle2'
make: *** [dogDisplayCpp-I.elf] Error 1
make: Target `all' not remade because of errors.
Build complete for project dogDisplayCpp-I