2009-02-17 18 views
6

estoy tratando de compilar mi programa que usa expresiones regulares en Linux. Construí la biblioteca de impulso en el libs/expresiones regulares/construir escribiendo maquillaje -fgcc.mak que creó un gcc directorio que contiene los siguientes cuatro archivosvinculando para impulsar expresiones regex en gcc

boost_regex-gcc-1_35 
boost_regex-gcc-d-1_35 
libboost_regex-gcc-1_35.a 
libboost_regex-gcc-d-1_35.a 

Ahora quiero usar expresiones regulares de mi programa de que está en algún directorio arbitrario. I #included boost/regex.hpp

Recibí el error que indicaba que no se encuentra regex.hpp. Luego di la opción -I en el compilador g ++. No obtuve ese error. pero me da el siguiente error

undefined reference to `boost::re_detail::perl_matcher<__gnu_cxx::__normal_iterator<char const*, std::basic_string<char, std::char_traits<char>, std::allocator<char> > >, std::allocator<boost::sub_match<__gnu_cxx::__normal_iterator<char const*, std::basic_string<char, std::char_traits<char>, std::allocator<char> > > > >, boost::regex_traits<char, boost::cpp_regex_traits<char> > >::construct_init(boost::basic_regex<char, boost::regex_traits<char, boost::cpp_regex_traits<char> > > const&, boost::regex_constants::_match_flags)' 

Busqué en Google y encontré que necesito para vincular de alguna manera una de las 4 bibliotecas anteriores a mi programa. Cómo puedo hacerlo. ¿A cuál debo vincular y por qué?

Respuesta

9

O agregue libboost_regex-gcc-1_35.a a su lista de archivos objeto en su paso de enlace o agregue -static -lboost_regex-gcc-1_35 al mismo. También asegúrese de tener un interruptor -I que apunte a su impulso incluye el directorio en su paso de compilación. Si las bibliotecas están fuera de la ruta de búsqueda típica (/usr/lib en * nix), agregue ese directorio a su comando de enlace con -Wl,-L/path/to/boost/libs para g++ o simplemente -L/path/to/boost/libs en ld.

0

También me enfrenté a problemas similares cuando uso el sistema de archivos boost. Esto es lo que necesitaba hacer para que se vincule estáticamente.

extracto de mi Makefile original (problemática): LIBS = -lboost_filesystem -static

Solución: LIBS = -Wl, -Bstatic -lboost_filesystem -lboost_system -Wl, -Bdynamic

Se pueden ver el Makefile completo desde http://code.google.com/p/neptuner/source/browse/codebase/trunk/stratego/uboat/Makefile

Necesario para agregar boost_system para hacer que enlace correctamente. La adición/especificación directa de libboost * .a creó más problemas. Tenga en cuenta que -Bdinámica está presente para evitar el enlace estático de bibliotecas estándar.

Cuestiones relacionadas