2012-06-21 11 views
7

He instalado libboost-dev a través de apt-get, y está ubicado en /usr/lib.Instalé libboost pero no puedo vincularlo

/usr/lib$ ls | grep boost 
libboost_filesystem.so.1.46.1 
libboost_iostreams.so.1.46.1 
libboost_serialization.so.1.46.1 
libboost_system.so.1.46.1 
libboost_thread.so.1.46.1 
libboost_wserialization.so.1.46.1 

Pero cuando traté de compilar una fuente que utiliza boost_thread todavía tiene un error.

$ g++ tcp_echo.cpp -o tcp_echo -L/usr/lib -llibboost_thread 
/usr/bin/ld: cannot find -lboost_thread 
collect2: ld returned 1 exit status 
$ g++ tcp_echo.cpp -o tcp_echo -L/usr/lib -lboost_thread 
/usr/bin/ld: cannot find -lboost_thread 
collect2: ld returned 1 exit status 

¿Cuál es la forma correcta de instalar y vincular a libboost?

+3

No necesita '-L/usr/lib', se agrega automáticamente a la ruta de búsqueda de la biblioteca. –

+2

¿Ha intentado ejecutar 'ldconfig' (como root) después de la instalación? –

+1

@JoachimPileborg ldconfig se supone que es ejecutado por apt, por lo que debería estar bien. Especialmente si '-L' se usa de todos modos. – robert

Respuesta

11

Una cosa que noto es que no tiene libboost_thread.so. Tiene el archivo versionado 1.46.1 pero normalmente las bibliotecas crearán un enlace simbólico a la copia versionada con el nombre no decodificado. Eso podría no ser , pero es una cosa que noté. (Esto se hace normalmente por el instalador.) - Omaha

creo que este es el punto. Implica que instalé libboost de la manera incorrecta. De hecho, sólo he instalado libboost-dev:

sudo apt-get install libboost-dev 

Pero lo que debería hacer es:

sudo apt-get install libboost-dev libboost1.46-doc libboost-date-time1.46-dev ibboost-filesystem1.46-dev libboost-graph1.46-dev libboost-iostreams1.46-dev libboost-math1.46-dev libboost-program-options1.46-dev libboost-python1.46-dev libboost-random1.46-dev libboost-regex1.46-dev libboost-serialization1.46-dev libboost-signals1.46-dev libboost-system1.46-dev libboost-test1.46-dev libboost-thread1.46-dev libboost-wave1.46-dev 

(o, en mi caso particular, instale libboost-system1.46-dev libboost-thread1.46-dev al menos)

Y una vez que instale correctamente, debe haber .a y .so en /usr/lib.

/usr/lib$ ls | grep boost 
libboost_date_time.a 
libboost_date_time-mt.a 
libboost_date_time-mt.so 
libboost_date_time.so 
libboost_date_time.so.1.46.1 
libboost_filesystem.a 
libboost_filesystem-mt.a 
... and so on ... 
+0

Solía ​​ser, Ubuntu tenía el meta-paquete libboost-dev-all para instalar todos esos. Sin embargo, parece que no puedo encontrarlo ahora.Aquí hay una línea de comandos que podría ayudar: 'sudo apt-get install' 'apt-cache search libboost | grep - -dev | grep -v '[12] \. [0-9]' | awk '{imprimir $ 1; } '' –

1

El cuadro de comentarios arruinó la cita de esta sugerencia, por lo que la publico como una respuesta para obtener las comillas correctas.

Solía ​​ser, Ubuntu tenía el meta-paquete libboost-dev-all para instalar todos esos. Sin embargo, parece que no puedo encontrarlo ahora. Aquí hay una línea de comandos que puede ayudar:

sudo apt-get install `apt-cache search libboost | \ 
    grep -- -dev | \ 
    grep -v '[12]\.[0-9]' | \ 
    awk '{ print $1; }'` 

(Tomado de install-boost-dev.sh https://github.com/imvu-open/istatd/ archivo)

+0

para otros: tenía exactamente el problema que tenía el OP, y este comando de hecho lo solucionó al instante. ubuntu 15.10. Por cierto, 'libboost-dev' parece no implicar la falta de 'libboost-dev-all' –

2

En Ubuntu 16.04, el paquete se llama: libboost-all-dev (no libboost- dev-all)

Cuestiones relacionadas