Delphi-PRAXiS

Delphi-PRAXiS (https://www.delphipraxis.net/forum.php)
-   Programmieren allgemein (https://www.delphipraxis.net/40-programmieren-allgemein/)
-   -   C-Header -die große Verzweifelung...- (https://www.delphipraxis.net/120908-c-header-die-grosse-verzweifelung.html)

Elko 18. Sep 2008 19:00


C-Header -die große Verzweifelung...-
 
Hallöchen!
Da in dem letzten Threat so viel Quelltext stnd, hab ich lieber einen neuen aufgemacht.
Ich kriegs einfach nicht hin: Wenn ich in meiner IDE in dem Main.c-File die Headerdatei funktionenHEAD.h includiere, die wiederum von funktionen.c includiert wird, dann kommen folgende Fehlermeldungen:

UNRESOLVED EXTERNAL SYMBOL

REFERENCE MADE TO UNRESOLVED SYMBOL

Füge ich die Dateien zu meinem Projekt hinzu, kommen sogar noch mehr "Warnings": Lauter "MULTIPLE PUBLIC DEFINITIONS"

Die Quelltexte:
Code:
//main.c
#include <REGAN21.H>         /* Register des AN21xx   */
#include <EZREGS.H>            /* Externe Register des AN21xx */
#include "funktionenHEAD.h"

int main(void){
...
}
Code:
// funktionen.h

unsigned char myfunc(void);
Code:
//funktionen.c

#include "funktionenHEAD.h"
#include <REGAN21.H>         /* Register des AN21xx   */
#include <EZREGS.H>            /* Externe Register des AN21xx */


unsigned char myfunc(void){
   return 0xAA;
}
Hat jemand einen Rat? Biiiiiiiiiiitteeee :eek: :confused:

Viele Grüße,
Stefan

jfheins 18. Sep 2008 19:06

Re: C-Header -die große Verzweifelung...-
 
Also wir haben bei Header Dateien immer eine ifdef XYZ define endif klausel gemacht, um nichts doppelt zu definieren. Aber ich weis nicht, ob das was damit zu tun hat.

Was wird denn eigentlich als "unresolved symbol" gekennzeichnet?

omata 18. Sep 2008 19:08

Re: C-Header -die große Verzweifelung...-
 
Zitat:

Zitat von Elko
Da in dem letzten Threat

Hier mal der Link zum erwähnten Thread.

Elko 18. Sep 2008 19:14

Re: C-Header -die große Verzweifelung...-
 
Stimmt, das mit dem include-guard hatte ich bei diesem Versuch vergessen, aber auch wenn ich ihn einfüge kommen die gleichen Fehlermeldungen. Das
UNRESOLVED EXTERNAL SYMBOL
REFERENCE MADE TO UNRESOLVED SYMBOL
kommt in Bezug auf die von mir definierten Funktionen und die Meldungen "MULTIPLE PUBLIC DEFINITIONS" kommen in Bezug auf die in <EZRegs.h> definierten Variablen. Ich denke, das Problem liegt darin, dass die VAriablen in der Headerdatei <EZRegs.h> schon definiert werden (hab ich aber nicht selbst gemacht). Was sagt ihr dazu?

messie 18. Sep 2008 19:43

Re: C-Header -die große Verzweifelung...-
 
Benutzt Du den BCB? Ich hatte mal ein ähnliches Problem. Zur Entwurfszeit konnte ich alle Bezüge finden, beim Linken ging es dann schief. Ich glaube, das lag daran, dass die Dateien nicht in der bpr waren. Für den Linker mussten sie mit "Add to Project" noch in die Projektdatei aufgenommen werden, erst dann lief das Linken.

Nebenbei: der Linker war auch fehlerhaft (Habe BCB6, betraf aber auch spätere Versionen, da muss ilink32.dll getauscht werden).

Und zuletzt: hat Deine Headerdatei die Struktur
Code:
#ifndef MainH
#define MainH
//Deklarationen
#endif
Damit kann ich die Sachen auch mehrmals inkludieren, ohne dass es Fehler gibt

Grüße, Messie

Elko 18. Sep 2008 20:34

Re: C-Header -die große Verzweifelung...-
 
Erst mal Danke für die Antwort (zu diesem Thema hab ich ja leider nicht sonderlich viele bekommen :| )
Also ich benutze die IDE von Keil und schreibe damit ein Programm für den AN2131 von Cypress.
Ich habe auch diese Form:
Zitat:

Zitat von messie
Und zuletzt: hat Deine Headerdatei die Struktur
Code:
#ifndef MainH
#define MainH
//Deklarationen
#endif
Damit kann ich die Sachen auch mehrmals inkludieren, ohne dass es Fehler gibt

eingehalten, aber es hilft anscheinend auch nix :?

Grüße,
Stefan

Elko 18. Sep 2008 20:53

Re: C-Header -die große Verzweifelung...-
 
Also in der Headerdatei <REAGAN21.H> werden Variablen nach folgendem Schema deklariert:
Code:
xdata unsigned char OUT7BUF[64]   _at_   0x7B40;
xdata unsigned char IN7BUF[64]   _at_   0x7B80;
xdata unsigned char OUT6BUF[64]   _at_   0x7BC0;
Dabei dürfen in Headerdateien doch eigentlich gar keine Variablen deklariert werden, sondern nur definiert werden, oder? Ist das nicht die Ursache für die Meldung des Linkers (nachdem die einzelnen c-Dateien beanstandungslos kompiliert wurden) "MULTIPLE PUBLIC DEFINITIONS"?
Falls ja, hat jemand eine Idee, das zu umgehen?

Grüße,
Elko

Elko 18. Sep 2008 21:53

Re: C-Header -die große Verzweifelung...-
 
Hat niemand eine Idee? :glaskugel: :cry:

Elko 19. Sep 2008 16:05

Re: C-Header -die große Verzweifelung...-
 
Also: erst mal Danke für die Antworten von euch!
Letztendlich hab ich es jetzt so gelöst, dass ich erst mal alle *.c und *.h Dateien zum Projekt hinzugefügt habe und das ganze Zeug mit dem "#include", etc. so belassen habe, wie ich es anfangs hatte. Dabei verstehe ich zwar nicht, was ich vorher falsch gemacht habe :gruebel: , aber trotzdem bin ich jetzt einfach froh, dass es jetzt endlich klappt :thumb:
cheers! :cheers:

Gruß,
Stefan

messie 19. Sep 2008 18:29

Re: C-Header -die große Verzweifelung...-
 
Zitat:

Zitat von Elko
Also: erst mal Danke für die Antworten von euch!
Dabei verstehe ich zwar nicht, was ich vorher falsch gemacht habe :gruebel: , aber trotzdem bin ich jetzt einfach froh, dass es jetzt endlich klappt :thumb:

Das ging mir damals auch so. Delphi ist da einfach etwas großzügiger bei der Verarbeitung der Deklarationen

Grüße, Messie


Alle Zeitangaben in WEZ +1. Es ist jetzt 19:21 Uhr.

Powered by vBulletin® Copyright ©2000 - 2024, Jelsoft Enterprises Ltd.
LinkBacks Enabled by vBSEO © 2011, Crawlability, Inc.
Delphi-PRAXiS (c) 2002 - 2023 by Daniel R. Wolf, 2024 by Thomas Breitkreuz