2009-05-05 4 views
9

Я пытаюсь скомпилировать источник SQLite amalgamation в свое приложение для iPhone (чтобы дать мне доступ к полнотекстовому поисковому функциям, недоступному в скомпилированной версии бинарного файла iPhone.Компиляция пользовательского SQLite для приложения iPhone

Когда я добавляю sqlite3.c и sqlite3.h в обычный шаблон приложения для Carbon C, он компилируется просто отлично (с единственным предупреждением об неиспользуемой переменной), но когда я пытаюсь скомпилировать его в своем проекте iPhone, я получаю количество ошибок, связанных с отсутствующими декларациями функций. Я могу решить эти проблемы, явно включив ctype.h, но это немного странно.

Однако, даже после того, как он строит, он не работает при соединении с foll ошибка:

"_sqlite3_version", referenced from: 
_sqlite3_version$non_lazy_ptr in sqlite3.0 
symbol(s) not found 
collect2: ld returned 1 exit status 

Я предполагаю, что это что-то в настройках сборки iPhone, но я не могу понять это. Есть идеи?

+0

Почему вы используете шаблон приложения Carbon C для развертывания iPhone? –

+0

Я не. Я просто хотел посмотреть, будет ли он компилироваться в любом месте - то есть, если настройки iPhone проекта вызвали проблемы, поэтому я решил, что основной шаблон Carbon C будет наименее вероятен для вмешательства. –

+0

(и, кстати, я был прав, поскольку он скомпилирован просто отлично) –

ответ

5

Попробуйте с этим шагом:

  1. меню Xcode -> проект -> новая цель -> статическая библиотека -> Имя: SQLite
  2. падение SQLite источник укрупнение в проект, теперь вы можете выбрать цель, выберите SQLite
  3. меню Xcode -> проект -> изменить активный целевой -> вкладка Общие -> Прямые зависимости -> добавить SQLite
  4. вкладка Общие -> Linked Libraries -> добавить свой SQLite
+0

В конце концов я сделал вариацию, следуя указаниям здесь: http://www.clintharris.net/2009/iphone-app-shared-libraries/ Работал неплохо. –

+0

@makdad, эта ссылка, кажется, сломана –

0

Этот тип ошибки обычно означает недостающую структуру.

  1. Правша или контроль кнопкой мыши на рамочные папку вашего проекта.
  2. Выберите Добавить> Существующие Framework ...
  3. Перейти к: Macintosh HD> Разработчик> Платформы> iPhoneOS.platform> Разработчик> SDKs> iPhoneOS2.2sdk> USR> Lib и выберите libsqlite3.dylib
  4. Rebuild ваш проект

Это должно заботиться о нем, я думаю. Возможно, вам потребуется добавить подобную библиотеку для работы на iPhone Simulator.

+0

Но если я это сделаю, он будет связан с встроенной библиотекой SQLite, верно? В то время как я хочу использовать свой собственный скомпилированный (поскольку у него есть функции, которых нет в встроенном). –

+0

Я не знаю, что вы можете это сделать. У меня такое чувство, что Apple не понравится. Я мог бы ошибаться, хотя –

+0

@bdotdub - вы определенно можете это сделать - и почему уход за яблоком? это не похоже на то, что он пытается заменить системную версию, просто компилируется в новой версии, используемой его приложением. это довольно стандартная практика. –

1

Мне удалось сделать это с помощью объединения и сбросить его прямо в мой проект, не требуя ссылки на предложенный catlan (я не говорю, что это плохая идея, просто это можно сделать в основном проекте).

Мне не нужно ничего редактировать (кроме добавления необходимого определения FTS для поиска текста) и скомпилированной ошибки. Проверьте настройки сборки и убедитесь, что '-sqlite3' не входит в ваши другие флаги привязки.

Смежные вопросы