Проблема с IOS7 (только) stdlibC++

Мне нужна помощь. У меня была фреймворк, который использовал stdC++ как std: string. Теперь, когда я создал новое приложение только для IOS7, возникла проблема со связыванием этого фреймворка из-за проблем с stdC++ lib:

Неопределенные символы для архитектуры armv7 "std::basic_string, std::allocator >::_Rep::_S_empty_rep_storage", на которые ссылаются из...

Я обнаружил кое-что странное, что когда я меняю цель Deplyment на ios6 в этом приложении, все работает нормально. С ios7 я вижу ошибки.

У меня уже есть флаг, установленный в других флагах компоновщика: -lstdC++

Есть идеи, что я делаю неправильно?

4 ответа

Решение

Просто обновление на этот ответ:

Этот шаг очень важен!

Убедитесь, что для стандартной библиотеки C++ установлено значение libstd C++ (стандартная библиотека GNU C++) в настройках компиляции Apple LLVM 5.0

Фон:

У меня есть приложение для iOS, которое внезапно прекратило сборку для iOS 7 со стандартными ошибками ссылок на библиотеки. Я успешно тестировал приложение на симуляторе и на iPad mini, а также заархивировал его, но когда я добавил iPhone 5S для тестирования, я начал получать ошибки ссылок (возможно, из-за новой архитектуры в миксе?).

При поиске ошибок ссылок в Google я нашел совет явно добавить libstd C++. Dylib в связанные библиотеки. Это не сработало.

Я экспериментировал, добавив libstd C++. 6.dylib вместо связанных библиотек; это устраняло ошибки ссылок, но приложение очень рано зависало в коде стандартной библиотеки C++.

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

Спасибо rimestad за указатель!

Если честно, мне не нравится приведенный выше ответ, так как он использует статический lib, а не динамический!

Я сам столкнулся с проблемой и обнаружил, что проблема в том, что xcode не может найти какие-либо файлы C++ в вашем проекте и, следовательно, предполагает, что libstC++ не нужен!

Довольно раздражает, когда вы ссылаетесь на статическую библиотеку, которая ее использует!!

Решение:

  • Добавьте пустой файл.mm в ваш проект!
  • Убедитесь, что в настройках сборки для стандартной библиотеки C++ установлено значение libstdC++ (стандартная библиотека GNU C++)

Это сработало для меня, и мне не нужно было добавлять -lstdC++ в другие флаги компоновщика!

Надеюсь, что это помогает другим с той же проблемой.

Спасибо за вашу помощь. Я нашел решение. Я использовал флаг -lstdC++ в других флагах компоновщика, но этого сейчас недостаточно. Мне пришлось добавить "libstdC++.6.0.9.dylib в BuildPhases->Link Binary With Libraries. Где-то в сети была информация о том, что у xcode есть проблемы с выбором ios7 stdC++ lib, и его нужно выбирать вручную.

С уважением, Марек

У меня была похожая проблема, но ответ @MarekM решил только часть моей проблемы, поэтому я попытался добавить libstdC++. Dylib и libstdC++.6.dylib, и это устраняет все ошибки компиляции.

Другие вопросы по тегам