Cuando suelo utilizar código (incluir encabezados) de bibliotecas C++ de terceros (no estándar), un archivo binario precompilado está vinculado (o incluido) al ejecutable de destino que representa mi aplicación, pero lo que sucede con C++ estándar ¿Biblioteca ?, hasta donde he visto, no tengo que enviar una biblioteca con una aplicación que usa código solo de la biblioteca estándar de C++. ¿El código está vinculado de forma estática e incluido en el ejecutable?¿Cómo se vincula la biblioteca estándar de C++ a mi aplicación?
Respuesta
No, las bibliotecas estándar están vinculadas dinámicamente de forma predeterminada en el tiempo de ejecución.
Al ejecutar el cargador dinámico se verá en un par de lugares estándar para las bibliotecas dinámicas si encuentra que se carga y se ejecuta de lo contrario la aplicación se cierra.
en sistemas Unix:
/usr/lib: Buscar: libstdC++ *
En Windows:
c: \ windows \ system32 mirada para: MSVCRT.DLL
También hay un par de variables de entorno que pueden afectar la ruta de búsqueda. Mire la página del manual de plataformas para dlopen para ver cuáles son. Todo lo que necesita debe estar en las páginas man para dlopen en su plataforma.
mayoría de los sistemas tienen estas librerías en los lugares adecuados y automáticamente se encontraron.
El resto de la STL no presentará dependencias de bibliotecas compartidas adicionales.
La mayor parte de todo está en los archivos de encabezado, porque está tan fuertemente modelado. Muy poco requiere libstdc++.so
(iostream
, puede ser, creo).
STL es principalmente archivos de encabezado. La biblioteca estándar incluye otras cosas. –
Todos los C++ requieren libstdC++. Tiene algunas funciones esenciales allí requeridas por el estándar. –
La única dependencia de tiempo de ejecución básica para los programas MinGW C++ está en MSVCRT.DLL. Otras dependencias dependerán de lo que realmente haga su programa; por ejemplo, si utiliza la conectividad de base de datos ODBC, dependerá de ODBC32.DLL (y probablemente algunas otras DLL de Windows). Sin embargo, el uso de clases como std :: string o std :: vector en un programa MinGW C++ no introducirá nuevas dependencias de bibliotecas dinámicas.
Si usted está preocupado por dependencias de bibliotecas dinámicas, echa un vistazo a la función "Dependency Walker" en http://www.dependencywalker.com/
En reciente MinGW gcc/g ++ versiones (4.40) se puede enlazar con un archivo DLL compartida en lugar de la estática por defecto biblioteca utilizando el marcador -shared-libstdC++.
Las versiones estáticas de la biblioteca se encuentran en/mingw/lib/gcc/mingw32/[versión de gcc]. El nombre del archivo es libstdC++. A. Esto se vinculará de forma predeterminada al compilar una aplicación de C++ con MinGW.
El valor predeterminado para MinGW parece haber cambiado, al menos en mi sistema está vinculando contra libstdC++ - 6.dll de manera predeterminada. Se puede desactivar con un indicador '-static-libstdC++'. – rustyx
@rustyx que es bueno saber. Siéntete libre de editar mi respuesta para reflejar eso (y dale a la respuesta un voto ascendente para que flote hasta la cima;) –
@rustyx Probé -static-libstdC++ (y -static-libgcc) y aun así mi programa todavía enlaza dinámicamente al bibliotecas mingw libstd * .dll. Estoy compilando de forma cruzada, ¿alguna idea de por qué? –
Las bibliotecas en tiempo de ejecución de C y C++ se vinculan de la misma manera que las bibliotecas normales, la principal diferencia es que normalmente se compilan y vinculan automáticamente con el compilador y el vinculador sin necesidad de especificarlas.
es incorrecto sin embargo, generalizar que usted no tiene que enviar con su aplicación. En la mayoría de los casos en que envíe archivos binarios enlazados dinámicamente, deberá incluirlos; por ejemplo, si compila con MSVC++, enlazará con lo que esté instalado en su máquina de compilación, si instala el archivo binario enlazado dinámicamente en una nueva instalación de Windows, es probable que tenga problemas a menos que se asegure de que las bibliotecas estén incluidas como parte del paquete de instalación (consulte la documentación sobre los redistribuibles de Visual Studio). Lo mismo es cierto en las máquinas Solaris (las bibliotecas estándar se actualizan como parte de un conjunto de parches).Con Linux, es más complicado, no se puede vincular estáticamente debido a la GPL, sin embargo, las bibliotecas generalmente se instalan a través de paquetes de distribución.
Buena respuesta, sin embargo, estaba hablando de mingw, que conecta las bibliotecas estándar estáticamente ... – Lawand
- 1. Crear biblioteca compartida que se vincula a otra biblioteca compartida no estándar
- 2. versiones de la biblioteca estándar de C++
- 3. Biblioteca estándar Intel (C++)
- 4. Localización de C biblioteca estándar
- 5. Trabajo interno de la biblioteca estándar C
- 6. Incluir biblioteca estándar de C++
- 7. Cómo reemplazar la función de biblioteca estándar C?
- 8. donde se define stdin en la biblioteca c estándar?
- 9. PHP: Cómo llamar a las funciones de la biblioteca estándar
- 10. ¿Cómo se vincula XML a un XSD?
- 11. Biblioteca estándar madura para C
- 12. trim no es parte de la biblioteca c/C++ estándar?
- 13. ¿Cómo se usa la biblioteca estándar en IronPython?
- 14. C++ 0x biblioteca estándar manual de referencia
- 15. ¿Qué hay de malo en mi uso del buscador de la biblioteca estándar de C++?
- 16. ¿Cuál es la diferencia entre la biblioteca estándar y la biblioteca de plantillas estándar?
- 17. Vinculación de la biblioteca C con nombre no estándar
- 18. declaración de C Biblioteca señal estándar
- 19. ¿Extender la biblioteca estándar de C++ por herencia?
- 20. Etiquetas de biblioteca estándar
- 21. ¿Objective-C tiene una biblioteca estándar?
- 22. ¿Por qué mi aplicación C++ es más rápida que mi aplicación C (usando la misma biblioteca) en un Core i7
- 23. Lista de excepciones de la biblioteca estándar de C++?
- 24. ¿Cómo mi aplicación C++ llama a la interfaz del controlador?
- 25. ¿cómo se vincula directamente a la página de actualización de la aplicación de la tienda de aplicaciones?
- 26. ¿El término "libc" es equivalente a "biblioteca estándar C"?
- 27. Diferencia entre la biblioteca C estándar y la biblioteca C POSIX
- 28. Matriz Biblioteca estándar
- 29. Objeto parecido a JavaScript en la biblioteca estándar de Python?
- 30. Combobox no se vincula correctamente a SelectedItem
El directorio es 'c: \ windows \ system32'. Al menos ahí es donde se guardan los tiempos de ejecución de Visual Studio. Sin embargo, no creo que MinGW los vincule. – avakar
Y para agregar a eso, mingw vincula tu aplicación a su biblioteca estándar de C++ estáticamente. – nos
Esta respuesta no es del todo correcta. libstdC++ no es lo mismo que MSVCRT.DLL. La última es la biblioteca * c *, la primera es la biblioteca * C++ *. Es cierto que cada binario producido por MinGW dependerá de MSVCRT.dll, pero eso en realidad no tiene nada que ver con la pregunta que se hizo. Como señalo a continuación, y como nos señala en el comentario anterior, la biblioteca libstdC++ se vincula por defecto de forma estática con el ejecutable. –