Fichier .c dans un projet Objective-C
tablier
Membre
Je ne vois pas comment faire pour inclure des fichiers .c dans un projet Objective-C.
Chaque fois que j'introduis un fichier .c et son .h dans mon projet, j'obtiens plus de 11000 erreurs. Plus curieus, les erreurs sont trouvées dans les .h des bibliothèques.
Si je transforme le .c en .m en mettant les routines dans une implémentation et en modifiant le .h pour avoir la déclaration @interface correspondante, plus d'erreur et le programme tourne correctement.
J'ai vérifié dans les "Build settings" que "Compile sources As" = "According to file type".
Donc, il y a quelque chose que je ne comprends pas!
Ou est-ce que je me plante?
Chaque fois que j'introduis un fichier .c et son .h dans mon projet, j'obtiens plus de 11000 erreurs. Plus curieus, les erreurs sont trouvées dans les .h des bibliothèques.
Si je transforme le .c en .m en mettant les routines dans une implémentation et en modifiant le .h pour avoir la déclaration @interface correspondante, plus d'erreur et le programme tourne correctement.
J'ai vérifié dans les "Build settings" que "Compile sources As" = "According to file type".
Donc, il y a quelque chose que je ne comprends pas!
Ou est-ce que je me plante?
Connectez-vous ou Inscrivez-vous pour répondre.
Réponses
Dans le .h il faut faire :
#ifndef _NOM_FICHIER_
#define _NOM_FICHIER_
// déclarations ici
#endif
J'ai cherché sur google. Beaucoup posent la même question, mais Je n'ai pas trouvé de réponse.
J'ai bien une idée, mais je ne sais pas comment on fait ça. L'idée serait de compiler séparément le fichier .c et de joindre le fichier .o au moment du linkage. Si quelqu'un a un exemple, je prends (je sais, c'est pas beau de copier!!).
Pour le C++ uniquement.
Sinon, c'est quoi cette librairie ?
Une librairie statique qui vient du C compilé, j'en ai ajouté une dans les "Frameworks", ça ne pose aucun problème. Il suffit d'ajouter l'import de son .h aux bons endroits et ça marche.
Que se passe-t-il si tu renommes le ".c" en ".m", mais sans changer son contenu ?
Car dans un .m on peut mettre de l'Objective-C, mais aussi du C "pur". Donc si ton fichier a une extension ".m" mais ne contient que du C comme actuellement, même s'il ne contient aucune ligne d'Objective-C, ça devrait compiler.
Ca n'expliquerait pas pourquoi avec l'extension ".c" ça ne compile pas ceci dit, mais si changer l'extension suffit c'est déjà un bon début...
Ca ressemble à quoi sinon les erreurs que tu as si tu mets le .c dans le projet sans changer son extension ? Elles sont à peu près toutes du même type ?
Description du projet:Projet Objective-C qui doit faire fonctionner un lecteur de ruban à travers une connexion USB. Donc, un Pic programmé et placé dans la machine.
Dans le groupe "Frameworks" j'inclus la LibUSB.
Dans les sources j'ajoute le usb.h de la LibUSB, ainsi qu'un fichier .c et son .h. Ces fichiers comportent des fonctions de gestion globales du lecteur SloSyn, qui sont: Par ailleurs, ces fichiers .c et .h utilisés dans une application en ligne de commande, marchent très bien.
Ce fichier est inclus automatiquement au début de tous tes fichiers source avant que le compilateur les compile.
(Comme si tu avais fait #import "Prefix.pch" au début de tous tes fichiers .c et .m)
Or si les fichiers inclus dans ton PCH comportent des instructions Objective-C, comme @class ou @interface ou des choses comprises uniquement par un compilateur Objective-C et pas un compilateur C, alors forcément la compilation de ton fichier C par le compilateur C ne va pas aimer.
Tu es sûr que dans ton .PCH tu as bien tes #imports de <Foundation/Foundation.h> & co entre #if __OBJC__ par exemple ?