IOS7 (solo) stdlibc++ problema de vinculación


Necesito ayuda. Tenía un framwork que estaba usando stdc++ como std: string. Ahora, cuando he creado una nueva aplicación para IOS7 solo hay un problema con la vinculación de este marco debido a problemas con stdc++ lib:

Símbolos indefinidos para arquitectura armv7 "std:: basic_string, std::allocator>:: _Rep:: _S_empty_rep_storage", referenciado desde ...

He descubierto algo extraño que cuando cambio el objetivo de Deplyment a ios6 en esta aplicación todo está funcionando bien. Con ios7 veo error.

Ya tengo una bandera establecida en otras banderas enlazadoras: - lstdc++

¿Alguna idea de lo que ami está haciendo mal?

Author: MarekM, 2013-09-23

4 answers

Solo una actualización de esta respuesta:

Este paso es muy importante!

Asegúrese de que C++ Standard Library esté establecido en libstdc++ (GNU c++ standard library) en la configuración de compilación del compilador LLVM 5.0 de Apple

Antecedentes:

Tengo una aplicación iOS que abruptamente dejó de construir para iOS 7 con errores de enlace de biblioteca estándar. Había estado probando la aplicación con éxito en el simulador y en un iPad mini, y también la archivé, pero cuando agregué un iPhone 5S para probar, empecé a obtener errores de enlace (posiblemente debido a una nueva arquitectura en la mezcla?).

Buscando los errores de enlace en Google, encontré consejos para agregar explícitamente libstdc++.dylib a las bibliotecas vinculadas. Esto no funcionó.

Experimenté añadiendo libstdc++.6.dylib a las bibliotecas vinculadas en su lugar; esto eliminó los errores de enlace, pero la aplicación se bloqueó en el código de la biblioteca C++ estándar muy temprano.

Eliminar las adiciones explícitas de la biblioteca y cambiar la configuración del compilador en Configuración de compilación, como se señaló anteriormente, se corrigieron los errores de enlace y el problema de tiempo de ejecución.

Gracias a rimestad por el puntero!

 27
Author: Doug Knowles,
Warning: date(): Invalid date.timezone value 'Europe/Kyiv', we selected the timezone 'UTC' for now. in /var/www/agent_stack/data/www/ajaxhispano.com/template/agent.layouts/content.php on line 61
2014-01-18 15:35:18

Para ser honesto, no me gusta la respuesta anterior, ya que utiliza la lib estática y no la dinámica!

Yo mismo he tenido el problema y he encontrado que el problema es que xcode no puede encontrar ningún archivo C++ en su proyecto y por lo tanto asume que el libstc++ no es necesario!

Bastante molesto cuando se está vinculando a una lib estática que lo usa!!

Solución:

  • ¡Agregue un archivo .mm vacío a su proyecto!
  • Asegúrese de que Biblioteca estándar de C++ se establece en libstdc++ (GNU c++ standard library) en la configuración de compilación

Esto funcionó para mí y no tuve que agregar-lstdc++ a Otras banderas de Enlace!

Espero que ayude a otros con el mismo problema.

 68
Author: rimestad,
Warning: date(): Invalid date.timezone value 'Europe/Kyiv', we selected the timezone 'UTC' for now. in /var/www/agent_stack/data/www/ajaxhispano.com/template/agent.layouts/content.php on line 61
2013-10-08 14:16:17

Gracias por su ayuda. He encontrado la solución. Estaba usando la bandera-lstdc++ en otras banderas enlazadoras, pero ahora no es suficiente. Tuve que añadir " libstdc++.6.0.9.dylib en BuildPhases- > Enlazar Binario Con Bibliotecas. Había en algún lugar en la información de la red que xcode tiene problemas con la selección lib de ios7 stdc++ y debe seleccionarse manualmente.

Saludos, Marek

 26
Author: MarekM,
Warning: date(): Invalid date.timezone value 'Europe/Kyiv', we selected the timezone 'UTC' for now. in /var/www/agent_stack/data/www/ajaxhispano.com/template/agent.layouts/content.php on line 61
2013-09-24 14:50:31

Tuve un problema similar, pero la respuesta de @MarekM solo resuelve parte de mi problema, así que intenté agregar libstdc++.dylib and libstdc++.6.dylib, y eso hace que todo el error de compilación desaparezca.

 3
Author: wzhang84,
Warning: date(): Invalid date.timezone value 'Europe/Kyiv', we selected the timezone 'UTC' for now. in /var/www/agent_stack/data/www/ajaxhispano.com/template/agent.layouts/content.php on line 61
2014-10-08 18:35:35