Как связать .a fat-static-libs с Apportable?

Как связать «.a» fat-static-libs с Apportable?

В начале я получил предупреждение,

Предупреждение: библиотека не найдена для lib-name. Попробуйте добавить это в массив deps в разделе add_params вашего файла configuration.json. Проверьте ~/.apportable/SDK/System, чтобы найти имена каталогов, соответствующие записям 'deps'.

Я добавил его в "deps" в JSON прямо там, где написано следующее:

// Список зависимостей. Обычно они соответствуют фреймворкам в проекте xcode.

Однако моя библиотека не является фреймворком. Это просто .a статическая библиотека, в которой есть части armv7, armv7s и i386, которые я собрал с помощью lipo из двух библиотек (armv7 и armv7s .a и i386 .a), созданных с помощью Xcode. Оба они используют единую структуру, которая называется этой платформой Boost.

Добавление его в deps подавило это предупреждающее сообщение, но компоновщик apportable по-прежнему дает неопределенные ссылки, поэтому он по-прежнему неправильно связывает этот файл.

Теперь я знаю, что Apportable должен повторно дрожать, так как Android победил не знаю, что делать с исполняемым форматом для Mac, поэтому, вероятно, придется разобрать мою библиотеку и, возможно, превратить ее в ELF-библиотека перед окончательной компоновкой. Я не уверен, как это отладить на данный момент, но поддерживается ли это вообще?


person Steven Lu    schedule 01.09.2013    source источник


Ответы (1)


Поскольку вы получаете «библиотека не найдена», это означает, что Apportable просто не может найти файл. Следовательно, проблема заключается только в расположении (или существовании) файла, а не в том, что находится в библиотеке или в том, как она построена.

Наиболее распространенная проблема с зависимыми целевыми объектами, особенно с проектами Xcode, переброшенными в другие проекты Xcode, соответственно, с рабочими пространствами с несколькими проектами, заключается в том, что результирующий вывод каждой цели/проекта попадает в разные папки. Затем Apportable (а также xcodebuild при некоторых обстоятельствах) не может найти полученные библиотеки.

Первый шаг, который вы должны попробовать, — убедиться, что установлены целевые зависимости. Выберите целевое приложение, перейдите на панель Фазы сборки и в разделе Целевые зависимости добавьте все платформы и библиотеки, которые отображаются в списке и от которых зависит ваш проект. Это должно гарантировать, что зависимые фреймворки/библиотеки будут построены, потому что встроенное автоматическое разрешение зависимостей Xcode недоступно для инструментов командной строки, насколько я понимаю. Поэтому вам нужно явно указать зависимые проекты соответственно их выходу.

Если это не поможет, вы можете заставить все цели записывать свои выходные данные в одну и ту же папку. В разделе Настройки сборки для каждой цели измените Путь продуктов сборки (символическое имя: SYMROOT) на ту же папку, например ~/myprojectsbuildoutput

Таким образом, даже зависимые другие проекты будут размещать свои выходные данные в той же папке, и xcodebuild, а также Apportable (это зависит от xcodebuild) смогут найти файлы библиотеки.

Совет. Убедитесь, что ваш проект успешно создан в командной строке. Откройте Терминал, cd в папку, где находится пакет .xcodeproj, и введите xcodebuild. Если xcodebuild дает сбой только из-за проверки, отключите Проверить встроенный продукт в разделе Настройки сборки целевого приложения. Если xcodebuild дает сбой, Apportable, скорее всего, тоже не будет работать, потому что он зависит от xcodebuild. Поэтому в качестве предварительного условия убедитесь, что xcodebuild работает с вашим проектом.

Если xcodebuild также выдает «библиотека не найдена», попробуйте вызвать ее с определенным SYMROOT:

xcodebuild SYMROOT=~/myprojectsbuildoutput

Если это сработает, вы знаете, что вам нужно обновить Build Projects Path каждой цели. Насколько я знаю, в настоящее время невозможно (или не задокументировано) передавать пользовательские параметры xcodebuild через Apportable, поэтому его необходимо настроить в самом .xcodeproj.

person LearnCocos2D    schedule 01.09.2013
comment
Я не уверен, является ли это критическим моментом, который был упущен, но как только я добавил путь моего толстого .a в Apportable config.json, он перестал выдавать предупреждение Not Found, но символы по-прежнему не найдены во время связывания. xcodebuild работает нормально. Думаю, я попытаюсь переместить его в папку проекта и попробовать различные способы подключения оттуда. Это просто ссылка, потому что это несколько сотен МБ, которые я не хотел включать в Git. - person Steven Lu; 01.09.2013