Estoy usando la biblioteca de Boost en Linux, GCC. Después de instalar y construir Boost, descubrí que los programas que usan Regex y Thread usan bibliotecas de Boost compartidas. Para mis propósitos, necesito enlaces estáticos. ¿Cómo puedo cambiar el tipo de enlace? ¿Debo reconstruir Boost, o quizás puedo establecer el tipo de enlace definiendo alguna constante en mis propios proyectos o en los archivos de configuración de Boost?Aumentar el enlace estático
Respuesta
Simplemente agregue -static
a su invocación de compilación. Aquí está una sesión de ejemplo rápido:
$ cat boost_formatted_time.cpp
#include <iostream>
#include <boost/date_time/posix_time/posix_time.hpp>
#include <boost/date_time/posix_time/posix_time_io.hpp>
using namespace boost::posix_time;
using namespace std;
int main(int argc, char **argv) {
time_facet *facet = new time_facet("%d-%b-%Y %H:%M:%S");
cout.imbue(locale(cout.getloc(), facet));
cout << second_clock::local_time() << endl;
}
$ g++ -o /tmp/bft_dyn boost_formatted_time.cpp -lboost_date_time
$ g++ -static -o /tmp/bft_stc boost_formatted_time.cpp -lboost_date_time
$ ls -lh /tmp/bft_*
-rwxr-xr-x 1 edd edd 216K 2010-02-24 12:34 /tmp/bft_dyn
-rwxr-xr-x 1 edd edd 1.5M 2010-02-24 12:34 /tmp/bft_stc
$ /tmp/bft_dyn
24-Feb-2010 12:34:55
$ /tmp/bft_stc
24-Feb-2010 12:34:59
$
Nota cómo el binaria estática es de 1,5 MB en lugar de 216kb para la variante vinculada dinámicamente. Todo hecho en las pruebas de Debian con los paquetes predeterminados de Boost.
Especifique -Lpath/to/library/
en el vinculador.
No tengo problemas con la construcción de un proyecto y la ruta de la biblioteca, solo necesito cambiar el tipo de enlace: de dinámico a estático. –
Eso no es correcto, necesita '-estático'. El '-L' proporciona la ubicación de la biblioteca, pero no el tipo de enlace. Ver mi respuesta para una sesión completa. –
- 1. Ventajas de enlace estático
- 2. Diferencia entre enlace estático y enlace dinámico
- 3. Enlace estático de Android vs enlace dinámico contra glibc
- 4. Enlace estático wxHaskell en Mac OS X
- 5. Enlace estático del controlador firebird para dbexpress
- 6. Enlace a un archivo estático de Hamlet
- 7. Enlace de tiempo de ejecución estático/dinámico
- 8. Enlace estático de Qt e implementación
- 9. WPF Enlace: El recurso estático no se puede resolver
- 10. Aumentar el espacio permgen
- 11. Buscando una herramienta de orden de enlace estático en Linux
- 12. Bloques de código, MinGW, Boost y problemas de enlace estático
- 13. Enlace estático de Cython con tiempo de ejecución de Python?
- 14. enlace estático de la función de biblioteca compartida en gcc
- 15. Enlace estático o dinámico de CRT, MFC, ATL, etc.
- 16. ¿Es un DLL más lento que un enlace estático?
- 17. Fuerza GCC al enlace estático p. pthreads (y no enlace dinámico)
- 18. Aumentar el equivalente de ManualResetEvent?
- 19. Tomcat aseguró el contenido estático
- 20. miembros estáticos y aumentar la serialización
- 21. ¿El método estático es más rápido que el no estático?
- 22. ¿Forzar el enlace estático de la biblioteca vinculada al objetivo de Xcode?
- 23. ¿Es posible usar en exceso el enlace estático tardío en PHP?
- 24. ¿Por qué el enlace estático no funciona con las variables en PHP 5.3?
- 25. g ++ linker: forzar el enlace estático si existe una biblioteca estática?
- 26. aumentar excepciones
- 27. Cree dinámicamente el enlace Javascript
- 28. Iniciar un std :: hilo con enlace estático provoca un fallo de segmentación
- 29. MSTest: cómo aumentar el tiempo de prueba
- 30. Java reemplazar cadena al aumentar el número
No ejecuto gcc desde la línea de comandos, estoy usando Eclipse CDT. Posiblemente, el interruptor estático se puede pasar al vinculador desde la configuración del proyecto; intentaré encontrarlo de esta manera. Gracias. –
¿'-estático' tiene el efecto en todas las bibliotecas, cuando se incluye más de 1 biblioteca? – mrgloom