2011-01-04 12 views
12

Recientemente actualicé desde boost 1.40 a 1.45 eliminando por completo el directorio boost anterior, descargando las fuentes 1.45 y reconstruyendo las bibliotecas que quería. Luego instalé las librerías usando bjam install./usr/bin/ld: no se puede encontrar -lboost_system-mt

Nada más ha cambiado en mi máquina, sin embargo, ahora cuando estoy construyendo mi programa en C++, me sale el siguiente error de enlace:

/usr/bin/ld: cannot find -lboost_system-mt 

busqué y realmente no existe el archivo. Parece que las bibliotecas mt ya no forman parte de la biblioteca, ¿o me falta algo?

¿Cómo puedo resolver esto?

+0

¿Se puede construir con la biblioteca no multiproceso (solo 'boost_system')? – chrisaycock

+1

Pruebe 'rpm -ql boost-devel | grep libboost' para ver qué .so tienes. –

+0

¿Lo construiste? –

Respuesta

1

su está seguro de que el /usr/lib/libboost_system-mt.so sim-enlace punto a la derecha del archivo:

$ realpath /usr/lib/libboost_system-mt.so 

lo contrario tendrá que instalar el proyecto o usar el suyo gestión de paquetes de distribución. Para Debian/Ubuntu sería apt-get install libboost-system1.45-dev - pero este paquete no existe mientras se escribe esto.

4

Es probable que esta versión no tenga activado el multi-threading por defecto.

Trate de pasar -lboost_system en lugar de -lboost_system-mt

Editar:

También es bueno para comprobar si las nuevas bibliotecas son realmente dentro /usr/local/lib. Debe buscar /usr/local/lib/libboost_system.so ya que no solicitó que las librerías se construyan con multi-threading. Si el archivo está allí, entonces su $ PATH (variable de entorno) podría faltar /usr/local/lib, y se debe actualizar el comando de compilación por lo que el compilador sabe dónde encontrarlos:

-L/usr/local/lib -lboost_system-mt

+0

@skyeagle actualizó mi respuesta. – karlphillip

18

Bueno, he resuelto este error en ubuntu 12.04 (x86_64) por el buen viejo enfoque scattergun

Instalando openvrml con el error "no se puede encontrar -lboost_filesystem-mt" después de make.

libboost-all-dev. instala 54 paquetes diferentes. Uno de ellos debe haber hecho el truco, funciona bien.

+0

¡Ja! Estaba evitando instalar ese paquete hasta que vi esta publicación. Funcionó para mí –

1

tengo descarada:

$ dpkg -S /usr/lib/libboost_system-mt.so 
libboost-system1.49-dev: /usr/lib/libboost_system-mt.so 

por lo tanto, se puede hacer:

sudo apt-get install libboost-system1.49-dev 
+1

Por favor, ponga los comandos en bloques de código. –

1

fijo Esta gracias a @KilgoreTrout 's y @user3191035, así que aquí tiene mis notas: Estoy en Ubuntu Natty 11.04 ; mi estado habitual era:

$ dpkg -S libboost_filesystem 
libboost-filesystem1.42.0: /usr/lib/libboost_filesystem.so.1.42.0 

Luego instalado:

sudo apt-get install libboost-all-dev # ton of packages 

...y después de eso, me sale esto:

$ dpkg -S libboost_filesystem 
libboost-filesystem1.42-dev: /usr/lib/libboost_filesystem-mt.a 
libboost-filesystem1.42.0: /usr/lib/libboost_filesystem.so.1.42.0 
libboost-filesystem1.42-dev: /usr/lib/libboost_filesystem.so 
libboost-filesystem1.42-dev: /usr/lib/libboost_filesystem-mt.so 
libboost-filesystem1.42-dev: /usr/lib/libboost_filesystem.a 

Por lo tanto, es allí donde la libboost_filesystem-mt.so es en este sistema operativo ...

1

cambio libboost_thread-mt a libboost_thread, en primer lugar encontrar la dirección de libboost_thread.so y libboost_thread .a continuación, hacer enlaces simbólicos a estos archivos en la misma dirección, por lo que debe ser

ln -s /...libboostSourceFiles.../libboost_thread.so /..RequestTOmtFiles.../libboost_thread-mt.so 

funciona para otros archivos -mt libboost también, como la serialización, iostreams, programoptions

1

Tuve un extraño encuentro con esto, también. Mi solución fue una oferta rara, pero como funcionó para mí y no lo leí en ningún otro lado, aquí está. En mi caso lboost_python3 faltaba.

Por lo tanto, he cargado los 54 paquetes como @Kilgore trucha sugirieron

sudo apt-get install libboost-all-dev 

Por desgracia, cuando me miré en el// usr lib - carpeta de sólo ciertos paquetes estaban disponibles allí. Sin embargo, cuando busqué en la carpeta/usr/lib obtuve más resultados: los archivos faltantes estaban todos en la carpeta/usr/lib/arm-linux-gnueabihf.

Simplemente copié y pegué todos los archivos relacionados con libboost en/usr/lib-folder et voila - la próxima vez que intenté construir algo con lboost_python3.so, todo funcionó.

Parece que algunos caminos se mezclaron o algo como esto. Espero que esto te ayude a ti o a alguien más.

Cuestiones relacionadas