Есть ли способ сделать функцию глобальной для библиотеки и для тех, кто включает / связывает библиотеку? - PullRequest
0 голосов
/ 29 июня 2010

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

Ответы [ 2 ]

1 голос
/ 02 июля 2010

Это работает для меня, если я просто использую 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

Возвращает:

Calling foo directly.
Foo: i = 1
Calling foo via callsfoo.
Callsfoo:
Foo: i = 2
0 голосов
/ 29 июня 2010

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

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

...