переменные экстерна в статической библиотеке, с помощью Objective C

Я создал статическую библиотеку, чтобы быть связанным в моих приложениях для iPhone. Эта библиотека использует некоторые глобальные переменные и функции, как в C. Моя проблема при использовании, например:

extern
void do_stuff (const int a)
{
    return a*a;
}

extern const int a_variable;
extern const int an_array[DEFINED_VALUE];

Когда я использую эту функцию или получаю доступ к этим переменным, где угодно в моем коде, компилятор говорит мне

"_do_stuff", от которого ссылаются: - [Возражают testMethod] в tests.o

"_a_variable", от которого ссылаются: - [Возражают testMethod] в tests.o

"_an_array", от которого ссылаются: - [Возражают testMethod] в tests.o

Символ (символы), не найденный Collect2: идентификатор возвратил 1 статус выхода

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

5
задан Ricardo Ferreira 25 June 2010 в 11:07
поделиться

2 ответа

Это ошибки компоновщика, сообщая вам, что указанные объекты не могут быть найдены. Вероятно, это означает, что вы не добавили свою библиотеку в проект.

В стороне, вам, вероятно, следует различать место, где вы объявляете эти вещи, где они действительно должны быть объявлены как extern , и место, где вы определяете их там, где их не должно быть. То есть, у вас может быть файл заголовка, который включает:

extern void do_stuff (const int a);
extern const int a_variable;
extern const int an_array[];

А затем файл реализации, который имеет что-то вроде:

void do_stuff (const int a)
{
    return a*a;
}

const int a_variable = 42;
const int an_array[DEFINED_VALUE] = { 1, 2, 3, 4 };

Другой вариант, вызывающий что-то a_variable , когда на самом деле это const немного вводит в заблуждение!

5
ответ дан 14 December 2019 в 18:58
поделиться

@walkytalky Ну, я запустил nm на .a, отфильтрованном с помощью grep, чтобы проверить, экспортируются ли эти символы.

host-006:Release-iphonesimulator <username>$ nm -g libCardLib.a | grep CP_
nm: no name list
     U _CP_BACK
     U _CP_FILE_EXTENSION_SUFFIX
     U _CP_FILE_PATH
     U _CP_SUIT_PREFIX
     U _CP_VALUE_PREFIX
00002020 D _CP_BACK
00002018 D _CP_FILE_EXTENSION_SUFFIX
0000201c D _CP_FILE_PATH
00002024 D _CP_FRONT
00002108 D _CP_SUIT_PREFIX
0000210c D _CP_VALUE_PREFIX
nm: no name list
nm: no name list
nm: no name list

Итак, похоже, что для каждого символа есть неопределенная копия?

0
ответ дан 14 December 2019 в 18:58
поделиться
Другие вопросы по тегам:

Похожие вопросы: