C-Programm in Xcode ausführen funktioniert nicht mehr?

P

Pixelcoffee

Mitglied
Thread Starter
Dabei seit
16.03.2019
Beiträge
45
Reaktionspunkte
7
Hello World,

das "HelloWorld" links bzw rechts was seit gestern rot hinterlegt ist (aufgrund eines Fehlers?) kann nicht mehr ausgeführt werden bzw wenn ich auf Run oder (Command + R) drücke, erscheint nur die Meldung "Build Failed". Was kann ich tun? Hat sich irgendetwas verschoben? An meinem Code liegt's nicht, den kann ich im Terminal ganz normal ausführen. Nur in Xcode nicht mehr...

Bildschirmfoto 2021-01-21 um 12.32.30.png
 
Xcode zeigt doch an, dass es eine Warning und einen Error beim Kompilieren gab. Was ist der Error?
(Dazu klickt man auf den roten Kreis mit dem x oben in der Mitte, falls dir das neu sein sollte...)
 
Ein Error:
1 duplicate symbol for architecture x86_64

Und eine Warnung:
no rule to process file '/Users/pixelcoffee/Library/Developer/Xcode/DerivedData/HelloWorld-ffcvjyjvbtelsffnmmhknmqqvsnc/Build/Products/Debug/HelloWorld' of type 'compiled.mach-o.executable' for architecture 'x86_64'

Nur kann ich damit nichts anfangen..
 
Schon der erste Treffer bei einer Google-Suche nach duplicate symbol for architecture x86_64 enthält die Lösung. Soviel Eigeninitiative würde ich von einem Programmierer eigentlich erwarten.
 
  • Gefällt mir
Reaktionen: warnochfrei, Gummiball und lisanet
Hab keine Ahnung was ich machen soll...
 
...sind denn deine beiden sourcen test.c und test_2.c nahezu gleich? ;) Sieht so aus, oder?

Du hast also wahrscheinlich versucht, dass du mehrmals main() in das gleiche Projekt, sprich in das gleiche Product compilieren willst. Kann nicht funktionieren. Fazit: lösche eine der beiden sourcen, am besten diejenige die du nicht brauchst.

Und ein Tipp: Xcode ist, wenn man von der eigentlichen Programmierung wenig Ahnung hat, schon ein hartes Brett. Lese dich dazu auf jeden Fall in die Developer-Doku von Apple ein. Du wirst da leider nicht drum herum zu kommen. Hast du die erste, zugegebenermaßen steile Lernhürde überwunden, wirst du sehen, dass Xcode und die Programmierung unter macOS richtig komfortabel ist.

Eidt: Noch was. Lass diesen uralten Mist mit "Hello World" in purem C. Wenn du damit anfängst brauchst du Ewigkeiten bis du auf dem Mac heimisch wirst. Mach deine Hello-World-Dinge gleich in Objektive-C oder Swift. So lernst du nicht nur die Programmiersprache, sondern auch die Xcode und die Frameworks unter macOS kennen (und die sind echt sehr mächtig)
 
  • Gefällt mir
Reaktionen: Pixelcoffee
Danke für die Antwort :)
Dann werde ich mich wohl noch intensiver mit Xcode direkt beschäftigen.

Also ist es nicht möglich, zwei .c Files im selben Xcode Projekt zu haben?
 
Danke für die Antwort :)
Dann werde ich mich wohl noch intensiver mit Xcode direkt beschäftigen.

Also ist es nicht möglich, zwei .c Files im selben Xcode Projekt zu haben?
Du kannst tausende von C-Files drin haben. Aber die Fehlermeldung sagt dir doch "duplicate symbol". Und symbol sind z.B. auch Funktionsnamen die global, also Programmweit gelten. Bei dir ist das aller Wahrscheinlichkeit die Funktion main(). Woher soll nun als der Linker erkennen, welche der beiden main()-Aufrufe er verwenden, sprich ins binary linken soll?

Sieh doch einfach in deinen sourcen nach.
 
  • Gefällt mir
Reaktionen: Pixelcoffee und dg2rbf
Ok, aber was kann ich denn stattdessen schreiben? Statt int main().... ich kenne mich da leider noch nicht gut genug aus.
 
Schon der erste Treffer bei einer Google-Suche nach duplicate symbol for architecture x86_64 enthält die Lösung. Soviel Eigeninitiative würde ich von einem Programmierer eigentlich erwarten.
Ich würd mir in nem Forum erwarten, dass Leute, die nix beizutragen haben, einfach nicht in einen Thread einsteigen ... aber so erfährt eben jeder seine täglichen Enttäuschungen des Lebens :noplan:
Schonmal dran gedacht, dass jemand mit einem HelloWorld Programm noch kein Programmierer ist?

@Pixelcoffee
  • Hast du in beiden files eine main()?
  • Wenn ja, warum hast du zwei c files?
Du hättest dann zwei Eintrittspunkte - und damit gäbs deinen Fehler weils nicht mehr klar zu definieren ist.
Du kannst im zweiten File das einfach als function anders nennen ... sowas wie void foo(void) {}. Wenn du auf diese Funktion zugreifen willst, dann solltest du die Files über ein header file bekannt machen.
Ich nehme an du folgst einem Tutorial, oder?
 
  • Gefällt mir
Reaktionen: ruerueka, MarkusMuller und Pixelcoffee
Dann solltest du dich etwas einlesen. Für eine Funktion in C kannst du so ziemlich alles schreiben int meineFunktion() z.B. oder int add(int a, int b). Der Aufbau ist Rückgabewert<Int/float/void> Funktionsname(Parameter<int, double usw.>)
Die main() Funktion ist der Einsprungpunkt in dein Programm und darf nur einmal vorkommen. Aber wie lisanet schon geschrieben hat solltest du dir überlegen ob du mit C anfangen willst. Willst du für Apple programmieren lerne Swift oder Objective-C.
 
@Pixelcoffee
  • Hast du in beiden files eine main()?
  • Wenn ja, warum hast du zwei c files?
Du hättest dann zwei Eintrittspunkte - und damit gäbs deinen Fehler weils nicht mehr klar zu definieren ist.
Du kannst im zweiten File das einfach als function anders nennen ... sowas wie void foo(void) {}. Wenn du auf diese Funktion zugreifen willst, dann solltest du die Files über ein header file bekannt machen.
Ich nehme an du folgst einem Tutorial, oder?

Danke für die Unterstützung!
Ja, hatte in beiden Files main(). Das hat sich ja jetzt quasi geklärt; man kann das wohl nur einmal setzen.

Bastele in beiden Dateien etwas rum, in dem einen mit if-Zuweisungen und in dem anderen mit Schleifen. Damit es übersichtlicher ist und ich den Überblick nicht verliere 😅
Tutorial schaue ich mir auch an, von TheMorpheusTutorials.

Was hat es denn mit dem header auf sich? Wenn ich ein neues .c file anlegen will, werde ich z.B. gefragt ob ich ein .h header dazu erstellen will...

Das alles dient auch erstmal nur der Vorbereitung auf das nächste Semester im Ingenieursstudium, wo wir bald mit C programmieren werden. Und weil es mich auch so interessiert :)

In so fern sind die Ratschläge von @lisanet und @pierredrks gut gemeint, aber vergebens. Es geht mir schon explizit darum, C zu lernen.
 
Lies vielleicht erstmal Programmieren in C von Kernighan und Ritchie
 
Das alles dient auch erstmal nur der Vorbereitung

Sowas hatte ich mir schon gedacht. Wenn du noch komplett am Anfang bist, hilft ein Buch. Ob oben genanntes empfehlenswert ist kann ich nicht sagen. Meint Tip wäre aber, arbeite für den Anfang mit einer C Datei und schreibe dir Funktionen für die einzelnen Teile (if,while usw.) und rufe sie aus main() auf. Wenn das noch nicht klappt, kommentiere den alten Code aus und schreibe den neuen direkt in main(). Mit einem halbwegs guten Buch oder Tutorial sollte der Anfang aber recht schnell was werden.
 
  • Gefällt mir
Reaktionen: Pixelcoffee
Zurück
Oben Unten