Создание и использование динамических библиотек в OS X - PullRequest
2 голосов
/ 26 октября 2011

У нас есть приложение для Windows, написанное на C ++, часть которого мы пытаемся портировать на Mac OS X. Наша цель - обернуть бизнес-логику в некоторые библиотеки и построить слой Cocoa сверху для контроллера и GUI.Вероятно, у нас будет несколько небольших приложений, использующих одни и те же библиотеки, поэтому нашей первой мыслью было использование динамических библиотек для кода C ++ (если нет лучшего способа).Однако у нас есть некоторые проблемы с достижением этого.Наша динамическая библиотека хорошо работает (по крайней мере, так), и мы получаем файл .dylib, на который мы ссылаемся в нашем приложении.Проблема в том, что наше приложение просто не может найти ни один из файлов .h, которые мы пытаемся включить.Мы уже проверили, что файлы .h экспортируются, а также проверили имя установки и убедились, что библиотека находится в правильном каталоге.Кроме того, мы следовали руководству Apple по созданию и использованию динамических библиотек и не нашли никакого специального шага, который мы пропустили.

Мой вопрос состоит из двух частей:

  1. Есть ли какой-то очевидный шаг?нам может не хватать, что способствует раскрытию интерфейса (т. е. файлов .h), который мы должны попробовать прежде всего?
  2. Мы подозреваем, что ошибка может быть в дрянном коде C ++, который мы унаследовали в этомпроект.Например, существует много логики (реализации методов), написанной непосредственно в файлах .h, а в некоторых случаях вообще нет соответствующего файла .cpp.Таким образом, файлы .h - это не просто описание интерфейса.Это может не быть (торжественной) проблемой, поскольку наше приложение не может даже найти .h файлы из библиотеки, и они должны по крайней мере присутствовать.Мы действительно надеемся, что сможем избежать переписывания большого количества кода, так как база кода, которая должна быть портирована, действительно велика и (как обычно) крайний срок близок.

PS: у нас пока естьработал только в Xcode 4.2 и еще не пробовал с инструментами командной строки.

1 Ответ

1 голос
/ 26 октября 2011

Опция 1

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

Как правило, вы будете использовать некоторую комбинацию:

  • HEADER_SEARCH_PATHS
  • LIBRARY_SEARCH_PATHS
  • USER_HEADER_SEARCH_PATHS
  • или FRAMEWORK_SEARCH_PATHS

Какой из параметров правильный, зависит от используемой вами библиотеки (например, эти параметры также могут влиять на компоновщик).При определении путей обнаружения вы можете добавить суффикс ** для обозначения рекурсивного поиска.

Это идеально, потому что у вас будет меньше проблем с синхронизацией ваших проектов xc с их решениями против.

Вариант 2

Некоторым людям действительно нравится некоторая поддержка перетаскивания для их включений ... Не знаю, но это подход, если существует так много дезорганизации, что вы можетепросто сделайте что-нибудь простое, например, добавьте путь поиска:

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

, который быстро запутывается и занимает несколько часов, чтобы восстановить, если вы хотите повторно использовать библиотеку, если естьколлизии в именах заголовков.

...