10
votes

Problèmes lors de la compilation de l'objectif C avec Clang (Ubuntu)

J'apprends un langage objectif. Comme je n'ai pas de mac, je compose et exécutant mon code dans la plate-forme Ubuntu 11.04.

Jusqu'à présent, j'utilisais CGC pour compiler. J'ai installé Gnustep et tout fonctionnait. Mais ensuite, j'ai commencé à essayer certaines fonctionnalités de l'objectif-C 2.0, comme @Property et @synthesize, que GCC ne permet pas.

J'ai donc essayé de compiler le code avec Clang, mais il semble que ce ne soit pas Relier correctement mon code avec les bibliothèques Gnustep, non même avec un simple programme mondial Bonjour.

Par exemple, si je compilise le code suivant: xxx

La sortie du compilateur est la suivante: xxx

la commande que j'utilise pour compiler est xxx

avec le -i la directive d'inclure les bibliothèques de Gnustep (sinon, Clang n'est pas capable de trouver la fondation.h).

J'ai googlé mon problème et visité des pages Web Gnustep et Clang, mais je n'ai pas trouvé de solution à elle. Donc, toute aide sera appréciée.

merci!


0 commentaires

3 Réponses :


1
votes

Vous pouvez essayer Compiler de GCC:

Tout d'abord, installez GNU Objective-C Runtime: sudo apt-get install gobjc

Puis compilez: gcc -o bonjour hello.m -wall -lobjc


1 commentaires

Salut Urlarenzo. J'ai déjà installé ce forfait et a essayé GCC de compiler (cela fonctionnait parfaitement). Cependant, j'ai compris que GCC ne permet pas certaines caractéristiques de l'objectif-C 2.0; Donc, j'essaie de faire courir les choses avec le compilateur de clang.



6
votes

Le problème était que la bibliothèque Gnustep-Base n'était pas utilisée par la liaison. Donc, la solution à cela utilisait l'option -Xlinker, qui envoie des arguments à la liaison utilisée par Clang: xxx pré>

l'instruction "-X lieur -lger -lgne-base" a fait la magie. Cependant, j'ai eu des problèmes avec cette commande liée à la classe qui représente une chaîne dans l'objectif-C: p> xxx pré>

Je pourrais résoudre son argument "-FCONSANT-STRING-CLASSE = NSCONSTANTSTRING ": P>

clang -I /usr/include/GNUstep/ -fconstant-string-class=NSConstantString \
-Xlinker -lgnustep-base test.m -o test


0 commentaires

0
votes

Vous n'êtes pas en mesure d'utiliser les fonctionnalités OBJC 2.0 car il vous manque un GUNDIME OBJC en soutenant ceux-ci. Le temps d'exécution de GCC est vieux et obsolète, il ne supporte pas OBJC 2.0. Clang / LLVM n'a pas de temps d'exécution ACOMPANIED, vous devez installer l'OBJC2-Runtime de Gnustep (qui peut être trouvé ici: https://github.com/gnustep/libobjc2 ) et réinstaller Gnustep en utilisant ce runtime.

Voici quelques scripts Bash pour différentes versions Ubuntu, qui font tout pour vous: P>

http://wiki.gnustep.org/index.php/gnustep_under_ubuntu_linux p>

Et s'il vous plaît, n'essayez pas de réinventer Gnustep faire, plutôt, utilisez-le: P>

http://www.gnustep.org /resources/documentation/developer/make/manual/gnustep-make_1.html P>

Si vous ne le pensez vraiment pas, voici quelques extraits de là: P>

1.2 Structure d'un Makefile P>

Voici un exemple de fabricant (nommé Gnumakefile pour mettre l'accent sur le fait qu'il s'appuie sur des caractéristiques spéciales du programme de fabrication GNU). P>

#
# An example GNUmakefile
#

# Include the common variables defined by the Makefile Package
include $(GNUSTEP_MAKEFILES)/common.make

# Build a simple Objective-C program
TOOL_NAME = simple

# The Objective-C files to compile
simple_OBJC_FILES = simple.m

-include GNUmakefile.preamble

# Include in the rules for making GNUstep command-line programs
include $(GNUSTEP_MAKEFILES)/tool.make

-include GNUmakefile.postamble


0 commentaires