2009-07-09 18 views
7

Estoy siguiendo el artículo Boost Getting Started. Lo he instalado con Bjam y pude ver incluir archivos y archivos de biblioteca (.a, .so).Instalar y compilar la biblioteca Boost en Linux

#include <boost/regex.hpp> 
#include <iostream> 
#include <string> 

int main() 
{ 
    std::string line; 
    boost::regex pat("^Subject: (Re: |Aw:)*(.*)"); 
} 

Si construyo por encima de código usando este comando

g++ -I./boost/include -L./boost/lib -lboost_regex-gcc43-mt -static -o test_boost2 test_boost2.cc 

me sale este error:

/tmp/ccJFVVid.o: In function `boost::basic_regex<char, boost::regex_traits<char, boost::cpp_regex_traits<char> > >::assign(char const*, char const*, unsigned int)': 
    test_boost2.cc:(.text._ZN5boost11basic_regexIcNS_12regex_traitsIcNS_16cpp_regex_traitsIcEEEEE6assignEPKcS7_j[boost::basic_regex<char, boost::regex_traits<char, boost::cpp_regex_traits<char> > >::assign(char const*, char const*, unsigned int)]+0x22): undefined reference to `boost::basic_regex<char, boost::regex_traits<char, boost::cpp_regex_traits<char> > >::do_assign(char const*, char const*, unsigned int)' 
    collect2: ld returned 1 exit status 

Se trabaja bien bajo mi máquina Windows.

¿Qué pasa?

gcc versión 4.3.2 (Debian 4.3.2-1.1)

Linux xxxxxxxx 2.6.26-1-686 # 1 SMP Viernes 13 de marzo 2009 18:08:45 GMT i686 GNU/Linux

Respuesta

8

¡He encontrado el problema! g ++ problema de comando! :(lo siento. Si muevo la opción -l al final de la línea, no se queja más :)

17
sudo apt-get install libboost-regex-dev 

No se moleste en instalar desde la fuente donde un sistema mucho más inteligente puede hacerlo mejor.

Recopilar, sólo tiene que utilizar

g++ -lboost_regex boost.cpp -o boost 

Para obtener la lista de nombres de paquetes disponibles (más partes de impulso):

apt-cache search libboost | grep -- -dev 

Dislaimer: Asumo que utiliza Debian ya que eso es lo que su Informes de la versión GCC.

+0

¡Funciona! ¿Pero cómo debo hacer si deseo instalar la última versión de Boost (1.39)? Porque lo que realmente quiero usar es la biblioteca Boost.Asio. :) –

+0

Si usas lenny puedes usar 'libboost1.35-dev', si usas squeeze, está 'libboost1.38-dev'. También está la versión independiente de Asio, 'libasio-dev'. Las versiones en lenny son bastante viejas. –

+0

las bibliotecas vinculadas deberían estar al final de la compilación, ¿no es así? Por lo tanto, sería: g ++ boost.cpp -o boost -lboost_regex – user289882

2

Su

-L./boost/lib 

parece sospechoso. Cuando construyes Boost, las bibliotecas se ponen en el directorio stage/lib. Además, el proceso de compilación predeterminado no crea bibliotecas estáticas, por lo que es mejor que tome -static fuera de la línea de comandos. Si eso no soluciona el problema, le sugiero que siga los pasos en my blog para solucionar este problema.

+0

Después de compilar expresiones regulares por separado y utilizar su resultado, el mismo error. g ++ -I./boost_1_39_0 ./boost_1_39_0/libs/regex/build/gcc/libboost_regex-gcc-1_38.a -o test_boost2 test_boost2.cc –

+0

g ++ -I./boost_1_39_0 -o test_boost2 test_boost2.cc ./boost_1_39_0/ libs/regex/build/gcc/libboost_regex-gcc-1_38.a ^ esto funciona !!!!!! –

+1

Esto se debe a que para las bibliotecas estáticas, la posición que especifique en la línea de comando del vinculador es importante. De nuevo, mira la publicación del blog. –

Cuestiones relacionadas