Неопределенные символы для ошибки архитектуры, когда цель развертывания 7.0

Я использую сторонние фреймворки в своем родном приложении для iOS (набор библиотек .a). Мое приложение разработано с использованием XCode 5 base SDK 7.0.

Библиотеки прекрасно компилируются и связываются, когда цель развертывания 6.1 (пути поиска библиотек и заголовков хороши). Однако, когда я изменяю цель развертывания на 7.0, я получаю следующую ошибку компоновщика:

Undefined symbols for architecture i386:
  "std::string::find_last_of(char const*, unsigned long) const", referenced from:
      GetExecutionDir(ECTemplateString<char>&, char*, bool) in myLibrary.a(moPlatForm.o)
  "std::string::find(char const*, unsigned long) const", referenced from:
      ParseLog(std::string const&, unsigned int&, CmoDateTime&, int&, std::string&) in myLibrary.a(AppLog.o)
  "std::string::size() const", referenced from:
      mo::CmoParam::WriteToStream(void*, mo::STREAM_STATE*) in myLibrary.a(moParams.o)
  "std::string::c_str() const", referenced from:
      GetExecutionDir(ECTemplateString<char>&, char*, bool) in myLibrary.a(moPlatForm.o)
      CMocaFileTransfer::UpdateParamsForGetTraceFiles(mo::CmoParamList&, long) in myLibrary.a(RobieFileTransfer.o)
      CMocaFileTransfer::AddTraceFileForUpload(std::string const&, std::string const&) in myLibrary.a(RobieFileTransfer.o)
      CMocaFileTransfer::CreateParamsForSendTraceFiles(mo::CmoObject&) in myLibrary.a(RobieFileTransfer.o)
      mo::CmoParam::WriteToStream(void*, mo::STREAM_STATE*) in myLibrary.a(moParams.o)
      ParseLog(std::string const&, unsigned int&, CmoDateTime&, int&, std::string&) in myLibrary.a(AppLog.o)
      CAppLog::LogExists(unsigned int) in myLibrary.a(AppLog.o)
      ...

Библиотеки устарели, я не уверен, что существует проблема совместимости. Я не планирую поддерживать iOS 6, поэтому мне нужно установить цель развертывания как 7.0. Любая помощь / направление было бы здорово.

23
задан 14.04.2020, 19:44

2 ответа

Оказывается, что если XCode не может найти никаких файлов C ++ в проекте, то предполагается, что libstd ++ не требуется. Таким образом, вы должны вручную добавить файл C ++ в проект (достаточно пустого файла .mm). Это решение.

Все кредиты идут на этот ответ в этой нити Stackoverflow .

28
ответ дан 14.04.2020, 19:44
  • 1
    Это также работает, если Вы добавляете какой-либо заголовок C++ #import к .pch файлу. – ETech 14.04.2020, 19:45
  • 2
    Материал Voodoo! Работавший для меня – MartinMoizard 14.04.2020, 19:46

для меня, в том числе « stdc ++. 6.0.9.dylib » вместо « stdc ++. Dylib » в зависимости исправили ошибки компоновщика

46
ответ дан 14.04.2020, 19:45
  • 1
    Это решило проблему. Спасибо!, Каково различие между этими двумя библиотеками? – IPhone Guy 14.04.2020, 19:45
  • 2
    Я полагаю, что, определяя библиотеку непосредственно, пропускает логику XCode для ' optimising' и проверка, если проект содержит исходные файлы C++ – Denis 14.04.2020, 19:46

Теги

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