¿Cuál es la diferencia? clang++ | clang -std=c++11

Había sido erróneamente el uso de este comando, el cual falló en el enlace de paso:

$ clang -std=c++11 -stdlib=libc++ myInputFile.cpp

¿Alguien puede explicar por qué clang proporciona un lenguaje C++ opción, y por qué no enlace? ¿Por qué no las opciones -x c++ o -std=c++11 lograr la misma cosa como clang++? Gracias!

  • ¿Qué pasa con los downvotes? Sí, entiendo que sonar++ es sólo un enlace para configurar el sonido para C++. Esa no es mi pregunta, por favor mirar de nuevo. Si es tan simple, por favor contestar, en lugar de downvote.
  • Esta pregunta en su 4ª revisión es perfectamente válida la pregunta que yo no veo ninguna razón para votar a cerrar o a downvote. Se trata de un «¿por Qué…?» pregunta, pero su ámbito de aplicación es lo suficientemente pequeño que existe la esperanza de un acuerdo general sobre la justificación será ofrecido como una respuesta.
  • Debe std=c++11 stdlib=libc++ en la pregunta -std=c++11 -stdlib=libc++?
  • Qué mensaje de error qué se obtiene cuando se trate de enlace? Se le vincula con el comando en la pregunta o un comando diferente?
  • Estás en lo correcto; eso es lo que me pasa por no copiar/pegar. He editado la pregunta por última vez para reflejar eso.
InformationsquelleAutor djwbrown | 2013-11-18

2 Kommentare

  1. 32

    Técnicamente, ni de los programas denominado clang o clang++ es un compilador: ambos son conductores que analizar los argumentos de entrada y determinar qué compiladores y ensambladores/enlazadores para invocar sobre lo que los archivos con qué argumentos de línea de comandos. La única diferencia entre los dos es que clang enlaces sólo contra la biblioteca estándar de C si se realiza un enlace, mientras que clang++ enlaces en contra, tanto en el C++ y bibliotecas estándar de C.

    La -x=<language> opción reemplaza el controlador de los programas de la heurística para determinar la fuente de archivo de idioma, dirige el controlador para invocar el compilador para <language> independientemente.

    La -std=<dialect> escoge la opción de que el dialecto de una lengua en particular que usted desea utilizar. Si usted necesita para asegurarse de que su programa de C++ es portable a un viejo C++98 compilador, puede compilar con -std=c++98. -std sólo se aplica a la lengua de destino: no intente compilar por ejemplo, ensamblador o java como C++98, sólo los archivos de origen que el conductor cree que para ser C++.

    En resumen, hay dos diferentes programas de controlador para hacer que sea fácil para seleccionar el que las bibliotecas de enlace en contra. Hay razonable de casos de uso para compilar C++, pero no de la vinculación con el estándar de C++ biblioteca.

  2. 3

    Clang es el nombre de todo el compilador.

    Sin embargo, desde una línea de comandos de punto de vista:

    • Clang es el compilador de C
    • Clang++ es el compilador de C++ (como g++ es un compilador de C++, mientras que gcc es un compilador de C)

    La -std=c++11 opción permite que el nuevo C++11 estándar (como en g++).

    • Pero, ¿por qué ofrecer un C++ indicador de opción con el compilador de C? Esa es mi pregunta principal.
    • Para ser compatible con la forma en que gcc hace las cosas.
    • es probable que averiguar cuando se ejecuta en el código de C++ y producir con éxito un archivo objeto. La diferencia entre clang y clang++ se muestra cuando se intenta vincular su objeto de archivos donde C++ requiere un conjunto diferente de C. clang se trate de enlace C, y clang++ código de C++.
    • eso ayuda, pero ¿por qué molestarse en darle la x-o -std= banderas si no cambian el enlazador en el idioma correcto así?

Kommentieren Sie den Artikel

Bitte geben Sie Ihren Kommentar ein!
Bitte geben Sie hier Ihren Namen ein

Pruebas en línea