ios — ld: библиотека не найдена для -lstdc ++. 6

После обновления бета-версии Xcode до 10.0 начнется ошибка «ld: library not found for -lstdc ++. 6». тот же код работает нормально в Xcode 9.2

Также обновлен macOS до 10.13.5

13

Решение

Быстрое решение — скопировать весь файл libstdc ++. * Из старого Xcode (9.4) в новый Xcode (10.x)

Для устройства:

cp /Applications/Xcode9.4.app/Contents/Developer/Platforms/iPhoneOS.platform/Developer/SDKs/iPhoneOS.sdk/usr/lib/libstdc++.* /Applications/Xcode10.app/Contents/Developer/Platforms/iPhoneOS. платформа / Разработчик / SDKs / iPhoneOS.sdk / USR / Библиотека /

Для симулятора:

cp /Applications/Xcode9.4.app/Contents/Developer/Platforms/iPhoneSimulator.platform/Developer/SDKs/iPhoneSimulator.sdk/usr/lib/libstdc++.* /Applications/Xcode10.app/Contents/Developer/Platforms/iPhone. платформа / Разработчик / SDKs / iPhoneSimulator.sdk / USR / Библиотека /

5

Другие решения

Эта проблема возникнет при настройке приложения для iOS. Это указано в примечании к выпуску:

Уведомления об устаревании:

Сборка с libstdc ++ устарела с Xcode 8 и не является
поддерживается в Xcode 10 при ориентации на iOS
. C ++ проекты должны сейчас
перейти на libc ++ и рекомендуется установить цель развертывания
iOS 7 или более поздняя версия. Помимо изменения сборки стандартной библиотеки C ++
После установки разработчики должны проверять жестко заданные флаги компоновщика и целевые
зависимости для удаления ссылок на libstdc ++ (включая -lstdc ++,
-lstdc ++. 6.0.9, libstdc ++. 6.0.9.tbd и libstdc ++. 6.0.9.dylib). Зависимости проекта, такие как статические архивы, созданные на основе
libstdc ++ также нужно будет перестроить под libc ++. (40885260)

Источник: Замечания к выпуску XCode Beta 2

Примечание:
Вы должны войти, чтобы получить доступ к странице.
Ссылка может выйти из строя в следующей бета-версии (изменение URL-адресов), но это в части Разработчики / Загрузить

XCode 10 официально выпущен с его Release Note, это все еще как так:

Сборка с libstdc ++ устарела с Xcode 8 и не является
поддерживается в Xcode 10 при ориентации на iOS
. C ++ проекты должны сейчас
перейти на libc ++ и рекомендуется установить цель развертывания
macOS 10.9 или более поздняя версия или iOS 7 или более поздняя версия. Помимо изменения C ++
Стандартные настройки сборки библиотеки, разработчики должны проводить аудит жестко
флаги компоновщика и целевые зависимости для удаления ссылок на libstdc ++
(включая -lstdc ++, -lstdc ++. 6.0.9, libstdc ++. 6.0.9.tbd и
libstdc ++. 6.0.9.dylib). Зависимости проекта, такие как статические архивы
которые были построены на libstdc ++, также должны быть перестроены на
Libc ++. (40885260)

7

Как сказано выше, lstdc ++ удален из Xcode 10. Чтобы это исправить,

  1. Перейдите в Target -> BuildPhases -> Link Binary With Libraries

  2. Найдите lstdc ++ и удалите его.

  3. Теперь вы можете получить ошибку в некотором фреймворке, который использует вышеупомянутую библиотеку «lstdc ++». Теперь вам нужно либо обновить эти рамки, либо удалить их, чтобы Xcode мог успешно их собрать.

5

  1. Если вы используете внешний Makefile для сборки библиотек C ++, добавьте

CXXFLAGS += -stdlib=libc++ Makefile вашей внешней библиотеки и удаленные экземпляры -stdlib=stdlibc++

  1. Если нет, игнорируйте вышеуказанный шаг, просто зайдите в Project> Target> Link Binary with library>
    • Удалить (-) libstdc ++. 6.0.9.tbd
    • Добавить (+) libc ++. Tbd
1

Просто зайдите, чтобы создать настройки, связать двоичные файлы с библиотеками и там удалить это. Это решило мою проблему.

-1
По вопросам рекламы [email protected]