Forum: Mikrocontroller und Digitale Elektronik Tasking Compiler/Linker


von Leo (Gast)


Lesenswert?

Hallo,

verwende für einen 16bit Controller von Infineon den Tasking Compiler 
und Linker. Folgende Linkerfehlermeldung verstehe ich nicht:
>>E 222: module Init.obj (INIT_IC): symbol '__main': unresolved

C++ Datei - Init.cpp:
1
int main(void);
2
3
extern "C"
4
{
5
  #include "CAN.h"
6
}
7
8
9
int main(void)
10
{
11
  while(1)
12
  {
13
    NOP();
14
  }
15
}

Ich habe doch bereits alles richtig deklariert. Weiß vielleicht jemand 
wie ich dieses Problem beheben kann ?

von Leo (Gast)


Lesenswert?

Ich habe alles möglich durchsucht. Das Problem lässt sich nicht beheben.
Für jegliche Hilfe bin ich sehr dankbar.

von Leo (Gast)


Lesenswert?

Kann mir niemand dazu helfen ?

von cskulkw (Gast)


Lesenswert?

Leo schrieb:
> extern "C"
>
> {
>
>   #include "CAN.h"
>
> }

Was soll das hier bezwecken?

Entweder binde ich eine Headerdatei ein oder ich lasse es. Ich würde 
extern "C" und die geschweiften Klammer weglassen.


Funktionen mit Rückgabewert sollten ein return enthalten. Auch dann, 
wenn sie dort nie hier gelangen.

von Leo (Gast)


Lesenswert?

Danke für die Antwort.

Ich habe die Init.cpp abgeändert. Trotzdem erscheint noch dieser Linker 
Fehler.
1
int main(void);
2
3
4
int main(void)
5
{
6
  return 0;
7
}

von Redtiger (Gast)


Lesenswert?

Versuch es mal ohne int main(void); und int:
1
void main(void)
2
{
3
  _nop();
4
}

von cskulkw (Gast)


Lesenswert?

ändere mal den Namen von main auf main2.

Wenn die Fehlermeldung immer noch __main heißt, dann wird Deine Datei 
warum auch immer ignoriert.

Ich glaube, jetzt weiß ich weiß Dein Problem ist. Laß doch mal die 
Prototypenzeile weg. Denn die Main-Funktion braucht keinen Prototypen.

Würde mich nicht wundern, wenn es dann funktioniet.

von Leo (Gast)


Lesenswert?

Hallo, danke erstmal für eure Unterstützung.
Ich habe alles mögliche versucht.

Version 1:
1
void main(void)
2
{
3
  _nop();
4
}

Compilerwarnung:
> W  91: no prototype for function "_main"
Linkerfehlermeldung:
>E 222: module Init.obj (INIT_IC): symbol '__main': unresolved

Version 2:
1
void main2(void)
2
{
3
  _nop();
4
}

Keine Compilerwarnung in Init.cpp
Fehlermeldung in der start.asm Datei:
>E 222: module start.lno (start): symbol '_main': unresolved

von Redtiger (Gast)


Lesenswert?

Wird der richtige Datei verwendet und im Projekt eingebunden (Pfad?), 
und auch abgespeichert? Ich habe hier kein Eclips Tasking, verwende der 
8051 und habe da manchmal das Problem im falschen Datei zu arbeiten.

von ... (Gast)


Lesenswert?

Aus unerfindlichen Gründen scheint Deine Toolchain eine Funktion "_main" 
zu erwarten.

von ... (Gast)


Lesenswert?

Also versuchs mal so:
1
void _main(void)
2
{
3
  _nop();
4
}

von Leo (Gast)


Lesenswert?

Ich habe das Problem gelöst. Die Linkeroptionen habe ich mit dieser 
Option -c++ ergänzt. Nun lässt sich auch alles linken.

Nachmals an alle vielen Dank für dir Unterstützung.

von Roland (Gast)


Lesenswert?

cskulkw schrieb:
>> extern "C"
>>
>> {
>>
>>   #include "CAN.h"
>>
>> }
>
> Was soll das hier bezwecken?

Wie Leo in seinem Eingangs Post schrieb, schreibt er sein Programm in 
C++. Die Header Datei liegt anscheinend als gewöhnlicher ANSI-C Code 
vor. Daher wird der Compiler mit extern "C" angewiesen, den Inhlalt von 
CAN.h als C-Code anstatt C++ zu interpretieren.

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.