2010-06-29 1 views
0

Сейчас я немного смущен. Я думал, что когда вы используете extern для функции, она станет глобальной для всего, но это не похоже на то, что я хочу прямо сейчас, это иметь некоторый набор функций, которые я могу использовать в своей статической библиотеке и в программе, которая связывает его. Как мне это? Я использую Objective-CЕсть ли способ сделать функцию глобальной для библиотеки и для тех, кто включает/связывает библиотеку?

+0

Вы можете принять ответ, который помог вам больше всего, нажав на значок проверки под вверх/вниз иконки голосования ответ. – Thea

+0

Приведите пример кода, который у вас уже есть. – Paul

ответ

1

Это работает для меня, если я использую только extern вместо extern inline при определении функции.

Пример: 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); 
} 

библиотека создана с:
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; 
} 

Собран с: gcc -ObjC -o caller caller.m lib.a -lobjc
Запуск с: ./caller

Returns:

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

На CardDefs.h у меня есть:

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; 
} 

И я должен использовать эту функцию в библиотеке и за ее пределами. У меня есть другие функции, похожие на это.