iphone - Símbolos no definidos para error de arquitectura cuando el destino de despliegue es 7.0
ios xcode (3)
Parece que myLibrary.a se generó con llamadas al código C ++ y se utilizó libstdc ++ como su biblioteca estándar de C ++. Su proyecto de aplicación probablemente especifique libc ++ en su lugar, tal vez como el compilador predeterminado.
Intente volver a libstdc ++ y vea si los errores desaparecen (o cambie, al menos). Es probable que su solución final sea una biblioteca creada en base a la nueva biblioteca estándar.
Estoy usando frameworks de terceros en mi aplicación nativa de iOS (grupo de bibliotecas .a). Mi aplicación está desarrollada con XCode 5 base SDK 7.0.
Las bibliotecas compilan y vinculan bien cuando el destino de despliegue es 6.1 (las rutas de búsqueda de encabezado y biblioteca son buenas). Sin embargo, cuando cambio el destino de implementación a 7.0, obtengo el siguiente error de enlazador:
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)
...
Las bibliotecas son un poco viejas, no estoy seguro si hay un problema de compatibilidad. No estoy planeando admitir iOS 6, así que tengo que establecer el destino de implementación en 7.0. Cualquier tipo de ayuda / dirección sería genial.
para mí, incluso el '' stdc ++. 6.0.9.dylib '' en lugar de '' stdc ++. dylib '' en las dependencias resolvió los errores del enlazador también
Resulta que si XCode no puede encontrar ningún archivo C ++ en el proyecto, entonces asume que libstd ++ no es necesario. Por lo tanto, debe agregar manualmente un archivo C ++ al proyecto (un archivo .mm vacío sería suficiente). Esa es la solución.
Todos los créditos van a esta respuesta en este hilo de .