Comment compiler / construire et exécuter un programme Objective-C dans Ubuntu à l'aide de Terminal?


7

Donc, ici, j'ai le script de base "hello world" pour Objective-C, j'ai Ubuntu sur mon ordinateur portable et je veux utiliser Ubuntu pour commencer à compiler des idées de base, des classes supplémentaires ou tout ce qui vaut la peine d'être codé pour l'un de mes projets actuels suraller, de cette façon je peux coder un peu où que je sois et ne pas toujours être sur mon iMac.

helloworld.m

Maintenant, ma seule question est de savoir comment créer et exécuter ce code dans le terminal?De toute évidence, ce n'est pas si important car je code pour iOS et OSX, donc le seul code qui s'affiche est tout ce qui n'appelle pas les scripts SDK ou Cocoa, donc en gros, il ne devrait afficher que les commandes de texte de base telles que "NSLog" oupeu importe, vous obtenez le juste de ce que j'essaie de faire, c'est ce que je veux.De cette façon, je peux au moins vérifier les petites erreurs.

J'ai regardé autour de moi et j'ai trouvé plusieurs aides pour les scripts shell par défaut et autres qui appellent le répertoire gcc ou quelque chose du genre d'après ma compréhension.J'ai créé mon propre dossier pour les projets Objective-C situés dans mes documents et je n'avais aucune idée si cela affectait ma capacité à exécuter le fichier à l'aide des commandes de terminal que j'ai essayées ou non, mais au cas où c'est le cas, je stocke leprojets en:

Accueil> Documents> Objective-C> helloworld.m

Aussi lors de l'exécution de la ligne de commande:

gcc -o helloworld.m

ou ceci

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

ou toute version de cette ligne de commande, je reçois cette erreur:

gcc: fatal error: no input files
compilation terminated.

Je crois avoir installé tous les fichiers du compilateur mais je ne suis pas opposé à un tutoriel complet, quoi qu'il en soit.Maintenant, pour clarifier et rassembler une aide visuelle pour que vous essayiez de m'aider à mieux, mon fichier texte se trouve dans mes documents:

filedirectory

Et vous pouvez voir visuellement le répertoire dans lequel il est placé.Maintenant, lorsque j'exécute l'une des commandes ci-dessus que j'ai essayées dans le terminal, cela donne ce résultat:

terminal

La commande que j'utilise n'a pas d'importance, c'est toujours ça.J'espère que cela aidera un peu plus à apporter une réponse à ma situation.Je ne suis pas opposé à un tutoriel complet et à devoir enregistrer mon fichier ailleurs ou apporter d'autres modifications par quelque moyen que ce soit, en fait ce serait apprécié!J'aimerais juste que cela fonctionne.

J'ai fait quelques recherches et j'ai remarqué que les réponses à ce sujet me permettaient déjà d'exécuter le script hello.m qui vient dans les bibliothèques GNUstep, ce n'est pas ce que j'essaye de faire.Cependant, comme j'ai du mal à exécuter le script par défaut, je pense que j'ai peut-être aussi un autre problème, je vais continuer mes recherches pour voir si je peux faire exécuter ce script, en attendant, toute aide est appréciée!

MISE À JOUR: J'ai essayé une nouvelle commande et obtenu un nouveau résultat, même si la compilation n'a pas réussi non plus, je pense que cela peut aider à répondre aux autres.Voici ce que j'ai essayé:

gcc -o helloworld.m -lobjc

et voici le résultat:

/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
0
gcc -o hello hello.m

should produce the objective c executable if the compiler is installed. If not, install it:

sudo apt-get install gobjc

3

You're missing the name for executable file. So, the command should be like:

gcc -o hello helloworld.m

After compilation, type

./hello

-o hello specifies the name of the output file you wish to create once the source is compiled. (In this case the output file name is hello.) This will create an executable file (named hello) which you, then, can run directly from the terminal. If you don't use -o option while compiling, the name of the executable file will be a.out by default. Now to execute that program, you need to type

./hello

The above commands assume you are already in the location of the source files, but both the source file and target output file may also be specified as a directory. For example:

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

will compile a C source file located on your desktop and place the executable binary in a Projects folder in your home directory. To run this executable, type;

./Projects/hello

Or you can also first go to the directory where the source file is located and run above commands. You do not need specify pathnames if you're in the same directory where your source file is.

I'm wondering why your file extension is .m instead of .c.


3

I did a little research and found a solution that works for now. I'll probably post a new question to see if there is a way to shorten this. But this successfully compiles my code. Thank you to everyone who provided some help, I definitely learned some new things.

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

7

In Ubuntu 14.04 LTS, go ahead and install GNU objective-c compiler:

sudo apt-get install gobjc  

Verify the version:

gcc --version

must say something like:

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

Install GNUStep development libraries (equivalent to Cocoa on macosx):

sudo apt-get install gnustep-devel

It should work and compile with:

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

You should run with:

./HelloWorld