Wie kompiliere / erstelle und führe ich das Objective-C-Programm in Ubuntu mit Terminal aus?

7

Hier habe ich also das grundlegende "Hallo Welt" -Skript für Objective-C. Ich habe Ubuntu auf meinem Laptop und möchte Ubuntu verwenden, um grundlegende Ideen, zusätzliche Klassen oder alles, was es wert ist, für eines meiner aktuellen Projekte unterwegs zu kompilieren. Auf diese Weise kann ich überall ein wenig codieren und muss nicht immer auf meinem iMac sein.

helloworld.m

Jetzt ist meine einzige Frage, wie ich diesen Code im Terminal erstellen und ausführen kann. Offensichtlich ist es nicht so wichtig, da ich für iOS und OSX codiere. Der einzige Code, der angezeigt wird, ist etwas, das die SDK- oder Cocoa-Skripte nicht aufruft. Grundsätzlich sollten also nur grundlegende Textbefehle wie "NSLog" oder "NSLog" angezeigt werden Was auch immer, Sie bekommen genau das, was ich versuche zu tun, was ich will. Auf diese Weise kann ich zumindest nach kleinen Fehlern suchen.

Ich habe mich umgesehen und mehrere Hilfen für Standard-Shell-Skripte gefunden, die nach meinem Verständnis das gcc-Verzeichnis oder etwas Ähnliches aufrufen. Ich habe meinen eigenen Ordner für Objective-C-Projekte erstellt, der sich in meinen Dokumenten befindet, und ich hatte keine Ahnung, ob dies meine Fähigkeit beeinträchtigt, die Datei mit den Terminalbefehlen auszuführen, die ich versucht habe oder nicht, aber falls ich das speichere Projekte in:

Home> Dokumente> Ziel-C> helloworld.m

Auch beim Ausführen der Befehlszeile:

gcc -o helloworld.m

oder dieses

gcc -I/home/caseyerdmann/Documents/Objective-C/helloworld.m

oder eine beliebige Version dieser Befehlszeile Ich erhalte diesen Fehler:

gcc: fatal error: no input files
compilation terminated.

Ich glaube, ich habe alle Compiler-Dateien installiert, aber ich bin nicht gegen ein vollständiges Tutorial, was auch immer das zum Laufen bringt. Um nun zu klären und eine visuelle Hilfe für euch zu sammeln, damit ich besser helfen kann, befindet sich meine Textdatei in meinen Dokumenten:

Archivverzeichnis

Und Sie können das Verzeichnis, in dem es sich befindet, visuell sehen. Wenn ich nun einen der oben genannten Befehle ausführe, die ich im Terminal ausprobiert habe, ergibt sich folgendes Ergebnis:

Terminal

Es ist egal, welchen Befehl ich benutze, es ist immer so. Ich hoffe, das hilft ein bisschen mehr, um eine Antwort auf meine Situation zu geben. Ich bin nicht gegen ein vollständiges Tutorial und muss meine Datei an anderer Stelle speichern oder andere Änderungen vornehmen. Tatsächlich wäre ich dankbar! Ich würde das einfach gerne zum Laufen bringen.

Ich habe einige Nachforschungen angestellt und festgestellt, dass die Antworten darauf mir bereits helfen, das Skript hello.m auszuführen, das in den GNUstep-Bibliotheken enthalten ist. Dies ist nicht das, was ich versuche. Da ich jedoch Probleme habe, das Standardskript zum Ausführen zu bringen, denke ich, dass ich möglicherweise auch ein anderes Problem habe, werde ich weiter nachforschen, ob ich dieses Skript zum Ausführen bringen kann. In der Zwischenzeit wird jede Hilfe geschätzt!

UPDATE: Ich habe einen neuen Befehl ausprobiert und ein neues Ergebnis erzielt, obwohl es auch beim Kompilieren nicht erfolgreich war. Ich denke, es kann helfen, andere zu beantworten, um dies zu beantworten. Folgendes habe ich versucht:

gcc -o helloworld.m -lobjc

und das war das Ergebnis:

/usr/lib/gcc/x86_64-linux-gnu/4.6/../../../x86_64-linux-gnu/crt1.o: In function `_start':
(.text+0x20): undefined reference to `main'
collect2: ld returned 1 exit status
Casey
quelle
Haben Sie einen Objective C-Compiler installiert und den Code kompiliert?
Edwin
Ich habe GNU Step installiert, bin mir aber nicht sicher, wie ich es zum Kompilieren des Codes verwenden soll. Ich habe es nur in gedit geschrieben und im Objective-C-Format als helloworld.m in dem aufgelisteten Verzeichnis gespeichert.
Casey
Die -oOption besteht darin, den Namen der zu produzierenden ausführbaren Datei anzugeben (die Standardeinstellung ist a.out). Sie sollten schreiben, gcc helloworld.m -o HelloWorld -lobjcwo HelloWorldder Name der ausführbaren Datei steht.
Edwin
Oh okay, ich verstehe jetzt, aber es hat immer noch nicht funktioniert. Vielleicht ist es ein Fehler mit GNUstep? Ich habe etwas darüber gelesen, wie man ein Shell-Skript erstellen muss, weil gcc nicht erkennen kann, wo sich die Datei befindet. Wenn ja, wie mache ich das? Oder ist das falsch?
Casey
Bitte geben Sie für die Ausgabe den Befehl ein, den ich im vorherigen Kommentar helloworld.m
eingegeben habe

Antworten:

7

Installieren Sie in Ubuntu 14.04 LTS den GNU Objective-C-Compiler:

sudo apt-get install gobjc  

Überprüfen Sie die Version:

gcc --version

muss so etwas sagen wie:

gcc (Ubuntu 4.8.2-19ubuntu1) 4.8.2
....

Installieren Sie die GNUStep-Entwicklungsbibliotheken (entspricht Cocoa unter Macosx):

sudo apt-get install gnustep-devel

Es sollte funktionieren und kompilieren mit:

gcc HelloWorld.m `gnustep-config --objc-flags` `gnustep-config --base-libs` -o HelloWorld

Sie sollten laufen mit:

./HelloWorld
eosorio
quelle
Vielen Dank. Dieses Verfahren hat bei mir funktioniert.
Puspam
3

Ich habe ein wenig recherchiert und eine Lösung gefunden, die jetzt funktioniert. Ich werde wahrscheinlich eine neue Frage stellen, um zu sehen, ob es eine Möglichkeit gibt, dies zu verkürzen. Aber dies kompiliert erfolgreich meinen Code. Vielen Dank an alle, die uns geholfen haben. Ich habe definitiv einige neue Dinge gelernt.

gcc -o hello hello.m \
    -I `gnustep-config --variable=GNUSTEP_SYSTEM_HEADERS` \
    -L `gnustep-config --variable=GNUSTEP_SYSTEM_LIBRARIES` \
    -lgnustep-base -fconstant-string-class=NSConstantString \
    -D_NATIVE_OBJC_EXCEPTIONS
Casey
quelle
Danke für den Befehl. Sie brauchen noch-lobjc
Viet
3

Ihnen fehlt der Name für die ausführbare Datei. Der Befehl sollte also wie folgt lauten:

gcc -o hello helloworld.m

Geben Sie nach der Kompilierung Folgendes ein

./hello

-o helloGibt den Namen der Ausgabedatei an, die Sie nach dem Kompilieren der Quelle erstellen möchten. (In diesem Fall lautet der Name der Ausgabedatei hello.) Dadurch wird eine ausführbare Datei (mit dem Namen hello) erstellt, die Sie dann direkt vom Terminal aus ausführen können. Wenn Sie -obeim Kompilieren keine Option verwenden, lautet der Name der ausführbaren Datei a.outstandardmäßig. Um dieses Programm auszuführen, müssen Sie jetzt eingeben

./hello

Bei den obigen Befehlen wird davon ausgegangen, dass Sie sich bereits am Speicherort der Quelldateien befinden. Es können jedoch auch die Quelldatei und die Zielausgabedatei als Verzeichnis angegeben werden. Zum Beispiel:

gcc -o ~/Projects/hello ~/Desktop/hello.c

kompiliert eine C-Quelldatei auf Ihrem Desktop und legt die ausführbare Binärdatei in einem Projects Ordner in Ihrem Home-Verzeichnis ab. Geben Sie Folgendes ein, um diese ausführbare Datei auszuführen.

./Projects/hello

Sie können auch zuerst in das Verzeichnis wechseln, in dem sich die Quelldatei befindet, und die obigen Befehle ausführen. Sie müssen keine Pfadnamen angeben, wenn Sie sich in demselben Verzeichnis befinden, in dem sich Ihre Quelldatei befindet.

Ich frage mich, warum Ihre Dateierweiterung .mstatt ist .c.

1lastBr3ath
quelle
Das macht Sinn, hat aber nicht funktioniert. Ich verstehe nicht ganz, was das erfordert, aber ich verstehe, dass GCC mein Compiler / Programm ist, mit dem ich meinen Code in termianl ausführe, aber welches Verzeichnis wird "-o" aufgerufen und warum wird "hallo" vorher benötigt helloworld.m wenn es nicht irgendwo in meiner Datei ist oder damit zusammenhängt. Und obwohl der Name der ausführbaren Datei, die benötigt wird, Sinn macht, habe ich eigentlich keinen. Es ist nur eine Textdatei, die in gedit eingegeben wurde und im Objective-C-Format gespeichert ist. Ich werde versuchen, meine Frage zu aktualisieren, um mein Problem besser zu beschreiben und festzustellen, ob dies zu einem besseren Ergebnis führt.
Casey
man gcc gibt die Handbuchseiten für gcc aus. Ich schlage vor, Sie lesen etwas. "-o foobar" sagt einfach, dass eine Datei mit dem Namen foobar ausgegeben wird, anstelle der Standarddatei a.out.
ubfan1
0
gcc -o hello hello.m

sollte das ausführbare Ziel c erzeugen, wenn der Compiler installiert ist. Wenn nicht, installieren Sie es:

sudo apt-get install gobjc
ubfan1
quelle
Das Ergebnis der Ausführung des ersten Befehls, den ich optimiert habe, um den korrekten Dateinamen meines Projekts zu verwenden, endete mit folgendem Ergebnis: gcc: schwerwiegender Fehler: Die Kompilierung der Eingabedateien wurde beendet. Ich habe auch überprüft, ob gobjc installiert wurde, indem ich den zweiten Befehl ausgeführt habe, und es ist tatsächlich installiert. Vermisse ich noch etwas?
Casey
Klingt so, als hätten Sie den falschen Dateinamen verwendet. Haben Sie den Fall richtig verstanden und haben Sie keine bösen Dinge wie Leerzeichen im Namen?
Ubfan1
Nun, ich habe zuerst Ihren genauen Befehl verwendet, aber dann wurde mir klar, dass mein Dateiname nicht hallo.m ist, also habe ich genau diesen eingegeben: "gcc -o helloworld.m" Meine Datei befindet sich jedoch in meinen Dokumenten Eine Zeile, die mir fehlt, um die Datei in meinen Dokumenten zu finden. Ich weiß nur nicht, was der Befehl ist.
Casey