c++ regex boost linker boost-regex

c++ - vincular para impulsar la expresión regular en gcc



regex boost (2)

Agregue libboost_regex-gcc-1_35.a a su lista de archivos de objeto en su paso de enlace o agregue -static -lboost_regex-gcc-1_35 a la misma. También asegúrese de que tiene un interruptor -I apunta 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 .

Estoy intentando compilar mi programa que usa expresiones regulares en Linux. Creé la biblioteca de impulso en libs / regex / build escribiendo make -fgcc.mak que creó un directorio gcc que contiene los siguientes cuatro archivos

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 que está en algún directorio arbitrario. I #included boost / regex.hpp

Recibí el error que decía que no se encuentra regex.hpp. Luego di la opción -I en el compilador g ++. No obtuve ese error. Pero me sale 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 descubrí que necesito vincular de algún modo una de las 4 bibliotecas anteriores a mi programa. Cómo puedo hacerlo. ¿A cuál debo vincular y por qué?


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

Extracto de mi archivo Makefile original (problemático): LIBS = -static -lboost_filesystem

Solución: LIBS = -Wl, -Bstatic -lboost_filesystem -lboost_system -Wl, -Bdinámica

Puede ver el Makefile completo en 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 las bibliotecas estándar.