Forum: Compiler & IDEs Problem mit "undefined reference to" bei Ulrich Radigs Webmodul


von Timo (Gast)


Lesenswert?

Hallo zusammen,

ich versuche gerade vergeblich, ein Programm für das Webmodul nach 
Ulrich Radig 
(http://www.ulrichradig.de/home/index.php/avr/avr-webmodule) zu 
erstellen.

Ich wollte eigentlich bloß mal gucken, wie groß der Code schon ist und 
wie viel Platz ich für mein eigentliches Projekt noch übrig habe. Daher 
habe ich einfach nur versucht, die 1.1.06er SW zu kompilieren.

Neben ein paar Kleinigkeiten, die ich beseitigen konnte, bricht make 
immer an dieser Stelle ab:
1
Linking: Hexfiles/Webserver_MEGA644.elf
2
avr-gcc -mmcu=atmega644 -I. -g -Os -funsigned-char -funsigned-bitfields -fpack-struct -fshort-enums -Wall -Wstrict-prototypes -Wa,-adhlns=main.o  -std=gnu99 main.o usart.o stack.o timer.o base64.o networkcard/enc28j60.o dns.o httpd.o telnetd.o ntp.o lcd.o wol.o http_get.o analog.o sendmail.o translate.o camera/cam.o camera/servo.o tcpservice/tcpcmd.o tcpservice/tcpsrv.o sdkarte/sdcard.o sdkarte/fat16.o sdkarte/sd.o sdkarte/sd_raw.o sdkarte/partition.o sdkarte/spi.o messung.o 1-wire/crc8.o 1-wire/onewire.o 1-wire/ds18x20.o rc5/rc5.o   --output Hexfiles/Webserver_MEGA644.elf -Wl,-Map=Hexfiles/Webserver_MEGA644.map,--cref -lm
3
ntp.o: In function `ntp_request':
4
A:\Dokumente\Programme\Webmodul\avr-webserver/ntp.c:104: undefined reference to `dns_request'
5
make.exe: *** [Hexfiles/Webserver_MEGA644.elf] Error 1

Ich habe natürlich erstmal recherchiert, was dieser Fehler bedeutet. Der 
Linker soll wohl die Funktion "dns_request" nicht finden. Ich verstehe 
allerdings nicht, warum. Die Funktion befindet sich in der Datei 
"dns.c". Diese ist im makefile mit "SRC += dns.c" eingebunden. In der 
Liste der .o Dateien ist die "dns.o" ja auch vorhanden. Woran kann es 
also liegen, dass der linker sich verschluckt?

Hier kurz die relevanten Teile aus dem Code:

dns.h
1
void dns_request(char *, uint32_t *);

dns.c
1
void dns_request(char *hostname, uint32_t *ip)
2
{
3
  _dns_qry(1, hostname, ip);  // A-Record anfragen
4
}

ntp.c
1
if ( tmp_ip == 0L ) {
2
  dns_request(NTP_SERVER, (uint32_t*)&ntp_server_ip[0]);
3
  ntp_timer = 4; // neuer Versuch nach 4 Sekunden
4
  NTP_DEBUG(" no IP **\r\n");
5
  return;
6
}

Ich bin für jede Hilfe dankbar!

von Rufus Τ. F. (rufus) Benutzerseite


Lesenswert?

Ist denn die Funktion in dns.c auch tatsächlich enthalten, also nicht 
durch bedingte Compilierung unterdrückt?

Sieh Dir mal die in dns.o enthaltenen Symbole an. Das sollte mit

  objdump -t dns.o

funktionieren.

von Timo (Gast)


Lesenswert?

Hallo Rufus,

danke für den Tipp! Die dns.o ist tatsächlich leer. Ich hatte die 
Nutzung der DNS Routine zwar eigentlich aktiviert, aber dies wird an 
anderer Stelle wieder aufgehoben. Die NTP Routine wird an dieser Stelle 
aber nicht mit abgeschaltet.

Ich werde jetzt mal beide möglichen Varianten (MMC/DNS/NTP an bzw. alle 
drei aus) ausprobieren.

Besten Dank!
Timo

Bitte melde dich an um einen Beitrag zu schreiben. Anmeldung ist kostenlos und dauert nur eine Minute.
Bestehender Account
Schon ein Account bei Google/GoogleMail? Keine Anmeldung erforderlich!
Mit Google-Account einloggen
Noch kein Account? Hier anmelden.