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

Pixelcoffee

Neues Mitglied
Thread Starter
Mitglied seit
16.03.2019
Beiträge
39
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
 

capmilk

Mitglied
Mitglied seit
03.10.2020
Beiträge
327
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...)
 

Pixelcoffee

Neues Mitglied
Thread Starter
Mitglied seit
16.03.2019
Beiträge
39
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..
 

capmilk

Mitglied
Mitglied seit
03.10.2020
Beiträge
327
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.
 

lisanet

Aktives Mitglied
Mitglied seit
05.12.2006
Beiträge
3.212
...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)
 

Pixelcoffee

Neues Mitglied
Thread Starter
Mitglied seit
16.03.2019
Beiträge
39
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?
 

lisanet

Aktives Mitglied
Mitglied seit
05.12.2006
Beiträge
3.212
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.
 

Pixelcoffee

Neues Mitglied
Thread Starter
Mitglied seit
16.03.2019
Beiträge
39
Ok, aber was kann ich denn stattdessen schreiben? Statt int main().... ich kenne mich da leider noch nicht gut genug aus.
 

Dextera

Aktives Mitglied
Mitglied seit
13.09.2008
Beiträge
15.939
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?
 

pierredrks

Mitglied
Mitglied seit
27.05.2015
Beiträge
118
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

Neues Mitglied
Thread Starter
Mitglied seit
16.03.2019
Beiträge
39
@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.
 

oneOeight

Aktives Mitglied
Mitglied seit
23.11.2004
Beiträge
56.679
Lies vielleicht erstmal Programmieren in C von Kernighan und Ritchie
 

pierredrks

Mitglied
Mitglied seit
27.05.2015
Beiträge
118
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.
 
Oben