¿Debo usar libc++ o libstdc++? [cerrado]


Estoy desarrollando ejecutables de interfaz de línea de comandos para osx y linux usando c/c++. El proyecto se vinculará con opencv. ¿Debo usar libc++ o libstdc++?

Author: Loozie, 2013-02-20

3 answers

Usaría la biblioteca nativa para cada sistema operativo, es decir, libstdc++ en GNU / Linux y libc++ en Mac OS X.

Libc++ no está 100% completo en GNU/Linux, y no hay ninguna ventaja real en usarlo cuando libstdc++ está más completo. Además, si desea enlazar a otras bibliotecas escritas en C++, es casi seguro que se hayan construido con libstdc++, por lo que también necesitará enlazar con eso para usarlas.

Más información aquí sobre la integridad de libc++ en varios plataforma.

 63
Author: Jonathan Wakely,
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
2018-07-23 11:18:49

Las principales distribuciones de Linux no proporcionan LLVM libc++, porque:

  1. A diferencia de Apple y FreeBSD, la GPL + 3 no es un problema, por lo que no es necesario implementar otra pila aquí.
  2. Los componentes de Linux se han desarrollado en torno a GNU libstd++ durante años. Algunos de ellos no construyas sobre nada más.
  3. Aunque libc++ es fuerte en nuevas características, tiene algunos problemas con el código heredado.

Si finalmente libc++ se convirtió en parte de las distribuciones, será como una opción componente. enlazar contra ella probablemente requerirá opciones adicionales.

Como dijo Jonathan, debes usar cualquier herramienta incluida por defecto. Clang es seguro de usar en Linux ya que está configurado como un reemplazo de GCC, por lo que en ese aspecto no tiene que preocuparse por 2 compiladores. Además, dado que estás apuntando a dos plataformas, deberías echar un vistazo a cmake.

 26
Author: Mario Vazquez,
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-05 18:38:07

Se dice que libc++ tiene más mensajes de error legibles por humanos en errores de plantilla.

 -2
Author: DAG,
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
2016-04-26 02:36:39