Forum: Compiler & IDEs Atmel Studio 7 -> conflicting declaration of C function utoa


Announcement: there is an English version of this forum on EmbDev.net. Posts you create there will be displayed on Mikrocontroller.net and EmbDev.net.
von Kilian K. (kellermaaan)


Bewertung
0 lesenswert
nicht lesenswert
Guten Morgen zusammen,

ich habe leider ein kleines Problem. Momentan arbeite ich mit Atmel 
Studio 7 und dem Atmel-ICE Basic damit ich meinen Arduino Due debuggen 
kann. Da ich aber vorher mit Visual Studio gearbeitet habe, musste ich 
erst mein vorhandenes Projekt im Atmel Studio lauffähig bekommen.

Das meiste habe ich glaub ich bereinigt, allerdings bekomme ich jetzt 
immer die folgende Fehlermeldung:
1
error: conflicting declaration of C function 'char* utoa(long unsigned int, char*, int)'

Diese Funktion gibt es in der stdlib und in der itoa.h für Arduino...

Könnte mir vielleicht jemand sagen, wie ist das beheben kann? Hab leider 
vorher nocht nichts mit dem Atmel Studio gemacht, deshalb kenne ich mich 
mit der Umgebung noch nicht so aus...

Gruß Kilian

von A. S. (achs)


Bewertung
0 lesenswert
nicht lesenswert
offensichtlich hast Du verschiedene Declarationen von utoa. Das erste 
Argument sollte m.E. 'unsigned int' sein.

Ist das die komplette Fehlermeldung?
Gibt es evt. noch Hinweise auf andere Codezeilen?
Kannst Du die beiden von Dir gefundenen Deklarationen hier auch posten?

von Kilian K. (kellermaaan)


Bewertung
0 lesenswert
nicht lesenswert
Also es gibt ein Warning in der stdlib.h:
1
c:\program files (x86)\atmel\studio\7.0\toolchain\arm\arm-gnu-toolchain\arm-none-eabi\include\stdlib.h(201,8): info: previous declaration 'char* utoa(unsigned int, char*, int)'
2
     char * _EXFUN(utoa,(unsigned, char *, int));

Und danach kommt die Fehlermeldung in der itoa.h:
1
c:\program files (x86)\arduino\hardware\arduino\sam\cores\arduino\itoa.h(34,65): error: conflicting declaration of C function 'char* utoa(long unsigned int, char*, int)'
2
     extern char* utoa( unsigned long value, char *string, int radix ) ;

von A. S. (achs)


Bewertung
0 lesenswert
nicht lesenswert
Nutze nur die Header, dessen Lib Du auch einbindest.

Wenn Du 2 Libs mit 2 unterschiedlichen Funktionen gleichen Namens 
verwenden willst, hast Du ein Problem.

von Kilian K. (kellermaaan)


Bewertung
0 lesenswert
nicht lesenswert
Achim S. schrieb:
> Nutze nur die Header, dessen Lib Du auch einbindest.
>
> Wenn Du 2 Libs mit 2 unterschiedlichen Funktionen gleichen Namens
> verwenden willst, hast Du ein Problem.

Ich habe immer nur die "stdlib.h" eingebunden und nie die "itoa.h". Ich 
habe auch mal die includes von stdlib auskommentiert, hat aber auch 
nicht geholfen.

Kann es vielleicht daran liegen, dass ich den Ordner von "itoa.h" 
mitlinke? Allerdings benötige ich den Ordner für die "Arduino.h" etc.

von Yalu X. (yalu) (Moderator)


Bewertung
0 lesenswert
nicht lesenswert
Das scheint ein Bug

  https://github.com/arduino/Arduino/commit/549a8055fa31ba23365e8d5849570a93bff3073f

gewesen und im aktuellen Arduino-Release (1.6.13) behoben worden zu
sein.

von Rufus Τ. F. (rufus) (Moderator) Benutzerseite


Bewertung
0 lesenswert
nicht lesenswert
Kilian K. schrieb:
> c:\program files
> (x86)\atmel\studio\7.0\toolchain\arm\arm-gnu-toolchain\arm-none-eabi\inc 
lude\stdlib.h(201,8):
> info: previous declaration 'char* utoa(unsigned int, char*, int)'
>      char * _EXFUN(utoa,(unsigned, char *, int));
>
> Und danach kommt die Fehlermeldung in der itoa.h:c:\program files
> (x86)\arduino\hardware\arduino\sam\cores\arduino\itoa.h(34,65): error:
> conflicting declaration of C function 'char* utoa(long unsigned int,
> char*, int)'
>      extern char* utoa( unsigned long value, char *string, int radix ) ;

Im INCLUDE-Pfad auf dem Rechner werden die Include-Dateien zweier 
Entwicklungssysteme gemischt, einerseits Atmel Studio 7, andererseits 
Ardiuno.

von Yalu X. (yalu) (Moderator)


Bewertung
0 lesenswert
nicht lesenswert
Rufus Τ. F. schrieb:
> Im INCLUDE-Pfad auf dem Rechner werden die Include-Dateien zweier
> Entwicklungssysteme gemischt, einerseits Atmel Studio 7, andererseits
> Ardiuno.

Das Atmle Studio kann nichts dafür. Der Konflikt kommt daher, dass itoa
und seine Brüder sowohl in der Arduino-Bibliothek als auch neuerdings
(seit ca. 2 Jahren) in der Newlib, die ebenfalls von Arduino verwendet
wird, definiert sind.

Das alleine wäre aber noch kein Problem, wenn die Signaturen dieser
Funktionen in beiden Bibliotheken übereinstimmen würden. Dann würde eben
jeweils diejenige Funktion gelinkt, die der Linker als erste in einer
der beiden Bibliotheken findet.

Da aber in der Arduino-Bibliothek irrtümlicherweise das erste Argument
von utoa als unsigned long statt unsigned int deklariert wurde, kommt es
hier zum Konflikt. Dieser Fehler ist aber wohl mittlerweile behoben.

Anstatt die Signatur in der Arduino-Bibliothek zu korrigieren, hätten
die Arduino-Entwickler diese Funktionen IMHO auch gleich komplett
entfernen können, da sie ja nun in der Newlib enthalten sind.

Antwort schreiben

Die Angabe einer E-Mail-Adresse ist freiwillig. Wenn Sie automatisch per E-Mail über Antworten auf Ihren Beitrag informiert werden möchten, melden Sie sich bitte an.

Wichtige Regeln - erst lesen, dann posten!

  • Groß- und Kleinschreibung verwenden
  • Längeren Sourcecode nicht im Text einfügen, sondern als Dateianhang

Formatierung (mehr Informationen...)

  • [c]C-Code[/c]
  • [code]Code in anderen Sprachen, ASCII-Zeichnungen[/code]
  • [math]Formel in LaTeX-Syntax[/math]
  • [[Titel]] - Link zu Artikel
  • Verweis auf anderen Beitrag einfügen: Rechtsklick auf Beitragstitel,
    "Adresse kopieren", und in den Text einfügen




Bild automatisch verkleinern, falls nötig
Bitte das JPG-Format nur für Fotos und Scans verwenden!
Zeichnungen und Screenshots im PNG- oder
GIF-Format hochladen. Siehe Bildformate.
Hinweis: der ursprüngliche Beitrag ist mehr als 6 Monate alt.
Bitte hier nur auf die ursprüngliche Frage antworten,
für neue Fragen einen neuen Beitrag erstellen.

Mit dem Abschicken bestätigst du, die Nutzungsbedingungen anzuerkennen.