Je tente d'écrire mon premier cadre Cocoa personnalisé et je souhaite exposer une fonction C simple de l'infrastructure qui englobe tout un tas de fonctionnalités, tout comme le fait NSApplicationMain. Quand j'ai simplement importé les fichiers directement depuis le projet, tout s'est bien passé, le projet a été construit et ma fonction C a été appelée correctement.Affichage de la fonction C à partir du framework Objective-C personnalisé
Maintenant, j'ai un nouveau projet de cadre de cacao qui contient les fichiers, je ne peux pas construire mon programme parce que je reçois des messages d'erreur "Symboles non trouvés", spécifiquement pour ma fonction C.
J'ai essayé de préfixer la définition de la fonction dans le fichier d'en-tête avec extern, mais toujours rien.
Quelqu'un peut-il me prévenir? Comment puis-je exposer des fonctions C standard via Cocoa Framework personnalisé?
idée approximative de ce que je fais:
Mon programme qui utilise mon cadre personnalisé:
#import <BDWebApplicationFramework/BDWebApplication.h>
int main (int argc, const char * argv[]) {
return BDWebApplicationMain(argc, (const char **)argv);
}
Mon tête-cadre: BDWebApplication.h
#import <Foundation/Foundation.h>
@interface BDWebApplication : NSObject {
NSString *name;
}
@property (readwrite, copy) NSString *name;
@end
extern int BDWebApplicationMain(int argc, const char * argv[]);
Mon fichier cadre: BDWebApplication.m
#import "BDWebApplication.h"
@implementation BDWebApplication
@synthesize name;
- (id)init
{
[super init];
name = @"New name";
return self;
}
- (void)dealloc
{
[name release];
[super dealloc];
}
@end
int BDWebApplicationMain(int argc, const char * argv[])
{
// Do some Obj-c stuff here
}
J'ai initialement suivi les instructions trouvées ici: http://atastypixel.com/blog/creating-applications-in-xcode-using-frameworks/ pour créer un projet de cadre dans mon projet de programme, qui devrait également créer un cadre C'est disponible pour tous mes autres projets. Le code source de mon projet est disponible ici, taré et gzipé, pour que vous puissiez l'examiner. C'est juste un téléchargement de 7Mb: http://restafarian.com/stackoverflow/stackoverflow.tgz Merci pour toute aide et conseil que vous pouvez fournir! – omarshariffdontlikeit
Le problème est en effet que votre cible BDWebAppTest n'est pas liée à votre cadre BDWebApplicationFramework (sic). Pour le voir, dévoilez l'arborescence complète des dépendances sous le contour de la cible et notez en particulier l'étape "Lier les binaires avec les bibliothèques". Vous verrez que pour le moment, il ne fait que se lier à Foundation.framework. Vous pouvez résoudre ce problème en faisant glisser votre framework dans la liste des frameworks liés. (Et probablement RegexKit aussi, puisque je suppose que votre projet le référence pour une raison.) –
Excellente substance, qui a fonctionné comme décrit. Pour autant que je sache, je ne devrais pas avoir besoin de lier RegexKit avec mon programme, car cela devrait être lié à mon framework, car c'est seulement mon framework qui utilisera RegexKit en coulisses. Merci pour votre aide, je sais que j'ai dû manquer quelque chose. J'ai posté un commentaire sur le blog original dont j'ai suivi les instructions et lui ai demandé d'ajouter cette étape à ses instructions. J'espère que cela aidera quelqu'un d'autre qui a un problème similaire. – omarshariffdontlikeit