2010-02-24 24 views
10

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

17

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.

+1

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. –

+0

¿'-estático' tiene el efecto en todas las bibliotecas, cuando se incluye más de 1 biblioteca? – mrgloom

0

Especifique -Lpath/to/library/ en el vinculador.

+0

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. –

+6

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. –

Cuestiones relacionadas