2010-06-29 22 views
0

Je suis un peu confus maintenant. Je pensais que lorsque vous utilisiez extern sur une fonction, il devenait global pour tout, mais cela ne semble pas le cas ... Ce que je veux en ce moment, c'est d'avoir un ensemble de fonctions que je peux utiliser dans ma bibliothèque statique et dans le programme qui le relie. Comment je fais ça? J'utilise Objective-CExiste-t-il un moyen de rendre une fonction globale à la bibliothèque et à ceux qui incluent/lient la bibliothèque?

+0

Vous pouvez accepter la réponse que vous avez aidé plus en cliquant sur l'icône de sélection sous les icônes de vote haut/bas de la réponse. – Thea

+0

Fournissez un exemple du code que vous avez déjà. – Paul

Répondre

1

Cela fonctionne pour moi, si je viens d'utiliser extern au lieu de extern inline lors de la définition de la fonction.

Exemple: inlib.h

extern int foo(int i); 
extern int callsfoo(int i); 

inlib.m:

#import "inlib.h" 
#import "stdio.h" 

extern int foo(int i) { printf("Foo: i = %d\n", i); } 

extern int callsfoo(int i) { 
    printf("Callsfoo:\n"); 
    foo(i); 
} 

Bibliothèque créé avec:
gcc -ObjC -c inlib.m -o inlib.o
ar -q lib.a inlib.o

caller.m:

#import "inlib.h" 
#import "stdio.h" 

int main(int argc, char** argv) { 
printf("Calling foo directly.\n"); 
foo(1); 
printf("Calling foo via callsfoo.\n"); 
callsfoo(2); 
return 0; 
} 

Compilé avec: gcc -ObjC -o caller caller.m lib.a -lobjc
Run avec: ./caller

Retours:

Calling foo directly. 
Foo: i = 1 
Calling foo via callsfoo. 
Callsfoo: 
Foo: i = 2 
0

Sur CardDefs.h je:

extern inline 
card_config mcc (card_suit s, card_value v, card_points p) 
{ 
    card_config ccfg; 
    ccfg.m_suit = s; 
    ccfg.m_value = v; 
    ccfg.m_points = p; 

    return ccfg; 
} 

Et je dois utiliser cette fonction dans la bibliothèque et à l'extérieur. J'ai d'autres fonctions qui sont similaires à cela.