Пользовательская конфигурация сборки Xcode приводит к тому, что для статических библиотек «библиотека / файл не найден»

У меня есть рабочая область с проектом, который связан со статическими библиотеками в другом проекте (который также находится в рабочей области). Это проблема в Kobold2D , которую я не смог решить, хотя я понимаю причину, и я полагаю, что это похоже на этот вопрос .

Целевые объекты проекта и целевые объекты статической библиотеки имеют конфигурации сборки Debug и Release . Все хорошо.

Теперь кто-то добавляет в проект новую конфигурацию сборки и называет ее, например, Ad-Hoc . Теперь цель проекта строит конфигурацию Ad-Hoc , однако статические библиотеки не имеют такой конфигурации. Очевидно, они затем по умолчанию создают конфигурацию Release .

В конце, когда компоновщик должен собрать все вместе, он терпит неудачу:

ld: library not found for -lbox2d-ios
Command /Developer/Platforms/iPhoneOS.platform/Developer/usr/bin/clang++ failed with exit code 1

Для принудительно загруженных библиотек через -force_load $ (BUILT_PRODUCTS_DIR) /libSomeLib.a ошибка аналогична, но говорит "файл не найден". Следует отметить, что библиотека libbox2d-ios.a находится в списке фазы сборки «связать двоичный файл с библиотеками».

Очевидно, проблема в том, что компоновщик предполагает, что библиотеки находятся в папке Ad-Hoc-iphoneos в BUILT_PRODUCTS_DIR, тогда как на самом деле они находятся в папке Release-iphoneos , потому что у них нет конфигурации сборки Ad-Hoc .

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

Я надеюсь, что есть способ:

  • принудительно поместить библиотеки в папку конфигурации сборки целевого приложения
  • запустить сценарий посткомпиляции и предварительной компоновки, который копирует каждую библиотеку в сборку папка конфигурации
  • укажите относительный путь к библиотекам
  • используйте другой макрос, отличный от $ BUILT_PRODUCTS_DIR для -force_load
  • флаг компоновщика, например -WTFmake-all-issues-go-away

Простите, но Я должен сказать это… АРГХ! :)

43
задан Community 23 May 2017 в 12:26
поделиться

1 ответ

Это - предварительная ошибка времени компиляции для Library, или Framework

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

можно добраться Module not found когда:

  • Вы не имеете, включают путь к библиотеке к Build Settings -> Header Search Paths
  • , Вы не имеете, включают путь платформы к Build Settings -> Framework Search Paths
0
ответ дан 23 September 2019 в 02:56
поделиться
Другие вопросы по тегам:

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