¿Cuándo es necesario usar use the flag -stdlib = libstdc ++?

¿Cuándo es necesario utilizar el flag -stdlib=libstdc++ para el comstackdor y el enlazador al comstackr con gcc?

¿El comstackdor usa automáticamente libstdc ++?

Estoy usando gcc4.8.2 en Ubuntu 13.10 y me gustaría usar el estándar c ++ 11. Ya paso -std=c++11 al comstackdor.

En Linux : en general, todas las distribuciones de Linux comúnmente disponibles usarán libstdc ++ por defecto, y todas las versiones modernas de GCC vienen con una libstdc ++ que admite C ++ 11. Si desea comstackr el código de c ++ 11 aquí, use uno de los siguientes:

  • g++ -std=c++11 input.cxx -o a.out
  • g++ -std=gnu++11 input.cxx -o a.out

En OS X antes de Mavericks : g++ era en realidad un alias para clang++ y la versión anterior de libstdc ++ de Apple era la predeterminada. Puede usar libc ++ (que incluía el soporte de biblioteca de c ++ 11) pasando -stdlib=libc++ . Si desea comstackr el código de c ++ 11 aquí, use uno de los siguientes:

  • g++ -std=c++11 -stdlib=libc++ input.cxx -o a.out
  • g++ -std=gnu++11 -stdlib=libc++ input.cxx -o a.out
  • clang++ -std=c++11 -stdlib=libc++ input.cxx -o a.out
  • clang++ -std=gnu++11 -stdlib=libc++ input.cxx -o a.out

En OS X desde Mavericks : libc ++ es el predeterminado. Puede usar la versión anterior de libstdc ++ de Apple (que no incluye el soporte de biblioteca de c ++ 11) pasando -stdlib=libstdc++

  • clang++ -std=c++11 input.cxx -o a.out
  • clang++ -std=gnu++11 input.cxx -o a.out

El comstackdor usa libstdc ++ automáticamente, si usa el frontend g ++, no el frontend gcc.

¿Cuándo es necesario utilizar el flag -stdlib=libstdc++ para el comstackdor y el enlazador al comstackr con gcc?

Respuesta corta: nunca

Respuesta más larga: -stdlib es una bandera de Clang y no funcionará con ninguna versión de GCC publicada alguna vez. En Mac OS X a veces los comandos gcc y g++ son en realidad alias para Clang no GCC, y la versión de libstdc ++ que envía Apple es antigua (circa 2008) por lo que no admite C ++ 11. Esto significa que en OS X cuando se usa Clang-fingir-ser-GCC, puede usar -stdlib=libc++ para seleccionar la nueva biblioteca compatible con C ++ 11 de Clang, o puede usar -stdlib=libstdc++ para seleccionar Versión antigua de C ++ 11 de libstdc ++ que pertenece a un museo. Pero en GNU / Linux, gcc y g++ realmente no son Clang, por lo que la opción -stdlib no funcionará en absoluto.

¿El comstackdor usa automáticamente libstdc ++?

Sí, GCC siempre usa libstdc ++ a menos que le diga que no use ninguna biblioteca estándar con la opción -nostdlib (en cuyo caso deberá evitar el uso de cualquier característica de biblioteca estándar, o usar -I y -L y -l indicadores para señalar a un conjunto alternativo de archivos de cabecera y biblioteca).

Estoy usando gcc4.8.2 en Ubuntu 13.10 y me gustaría usar el estándar c ++ 11. Ya paso -std=c++11 al comstackdor.

No necesitas hacer nada más. GCC viene con su propia implementación de la biblioteca estándar de C ++ (libstdc ++) que se desarrolla y prueba junto con GCC, por lo que la versión de GCC y la versión de libstdc ++ son 100% compatibles. Si comstack con -std=c++11 entonces eso habilita las características C ++ 11 en el comstackdor g++ y también las características C ++ 11 en los encabezados libstdc ++.