Xcode: как связать предварительно скомпилированную библиотеку c ++ - PullRequest
1 голос
/ 16 ноября 2011

Новичок-Проблема:

У меня есть небольшой тестовый класс (TestLibMain.cpp) в c ++, который я скомпилировал в «libTestLib.dylib», который находится в подкаталоге «debug» каталога, содержащего файл TestLibMain.h.

Как я могу использовать dylib из моего Xcode-проекта? Я импортировал TestLibMain.h в свой код и установил путь поиска заголовка в настройках сборки. Это отлично работает. Но теперь компоновщик говорит мне, что он не может найти dylib (ни файл "TestLibMain.cpp", который он мог бы скомпилировать сам ...). Дилиб, созданный в Ecplise / CDT, имеет другое имя: «libTestLib.dylib». Установка "путей поиска библиотеки" в XCode не помогает ....

Это мое сообщение об ошибке:

Undefined symbols for architecture i386:
  "TestLibMain::TestLibMain()", referenced from:
      -[tbViewController viewWillAppear:] in tbViewController.o
  "TestLibMain::getNumber()", referenced from:
      -[tbViewController viewWillAppear:] in tbViewController.o
ld: symbol(s) not found for architecture i386
clang: error: linker command failed with exit code 1 (use -v to see invocation)

Вопросы:

  1. Можно ли связать dylib-файл, созданный для i386, в Xcode? Я хочу использовать в Xcode-проекте скомпилированные библиотеки из проекта в Eclipse (который я хочу использовать в Android NDK ...)
  2. Как я могу заставить Xcode найти dylib-файл?
  3. Является ли файл dylib правильным файлом для ссылки? Там нет файла .a, созданного eclipse, но .d и .o файл?

1 Ответ

3 голосов
/ 16 ноября 2011

1.Если вы используете dylib для проекта iOS - это невозможно, поскольку Apple не разрешает использовать собственные динамические библиотеки.Вы также не можете использовать библиотеки, созданные с использованием NDK, даже если они для одной и той же архитектуры, поскольку они имеют разный двоичный формат (Mac OS и iOS используют Mach-O, а Android использует ELF).Ваши целевые настройки-> Этапы сборки-> нажмите '+' -> Добавить другой

3.dylib - правильный файл, если это не проект iOS.

...