2011-11-08 8 views
7

que había instalado el paquete libtcmalloc-minimal0Vinculación con ubuntu libtcmalloc

pero cuando intento compilar mi programa con la bandera

-ltcmalloc-minimal0

estoy recibiendo el error

/usr/bin/ld: no puede encontrar -ltcmalloc_minimal0

me había registrado/usr/lib y la biblioteca está allí

Más información

dpkg da siguiente o/p

dpkg -L libtcmalloc-minimal0 
/. 
/usr 
/usr/lib 
/usr/lib/libtcmalloc_minimal.so.0.0.0 
/usr/lib/libtcmalloc_minimal_debug.so.0.0.0 
/usr/share 
/usr/share/doc 
/usr/share/doc/libtcmalloc-minimal0 
/usr/share/doc/libtcmalloc-minimal0/TODO 
/usr/share/doc/libtcmalloc-minimal0/AUTHORS 
/usr/share/doc/libtcmalloc-minimal0/copyright 
/usr/share/doc/libtcmalloc-minimal0/changelog.gz 
/usr/share/doc/libtcmalloc-minimal0/README.gz 
/usr/share/doc/libtcmalloc-minimal0/changelog.Debian.gz 
/usr/lib/libtcmalloc_minimal.so.0 
/usr/lib/libtcmalloc_minimal_debug.so.0 

y estoy recopilando para el modo de 64 bits

y la biblioteca también es de 64 bits

file /usr/lib/libtcmalloc_minimal.so.0.0.0 
/usr/lib/libtcmalloc_minimal.so.0.0.0: ELF 64-bit LSB shared object, x86-64, version 1 (SYSV), dynamically linked, stripped 
+0

Es llamó exactamente '/ usr/lib/libtcmalloc_minimal0.so'? Es la biblioteca para la arquitectura correcta? (podría estar compilando en modo de 64 bits, mientras que la biblioteca que instaló es de 32 bits) – wormsparty

+0

tanto la biblioteca como el programa es el modo de 64 bits –

+0

Entonces, ¿qué parte del código requeriría libtcmalloc-minimal? ¿La declaración nueva/eliminar lo requiere? – Naveen

Respuesta

6

No se puede vincular a un archivo simplemente con -l si no termina exactamente con .so, ya que la El enlazador asume una convención de nomenclatura particular (lib*.so).

usted tiene varias opciones:

  • Instalar libtcmalloc-minimal0-dev si es que existe, que debe proporcionar el vínculo dinámico .so.

  • Crear el enlace simbólico a sí mismo: cd /usr/lib; ln -s libtcmalloc_minimal.so.0.0.0 libtcmalloc_minimal.so; cd -

  • conectar directamente a la biblioteca sin el enlace simbólico mediante el uso de gcc test.c /usr/lib/libtcmalloc_minimal.so.0.0.0

  • Enlace usando la opción -l utilizando el nombre completo: -l:libtcmalloc_minimal.so.0.0.0

+0

Entonces, ¿qué parte del código requeriría libtcmalloc-minimal? ¿Las declaraciones nuevas/borrar lo requieren? – Naveen

0

Correr dpkg -L libtcmalloc-minimal0 le mostrará que la biblioteca es /usr/lib/libtcmalloc_minimal.so.0 lo que la opción correcta debería ser -ltcmalloc_minimalsin ninguna dígitos

+1

mismo error con ltcmalloc_minimal ver la edición para ver dpkg O/P –

+1

tal vez necesita ejecutar 'ldconfig'. Para entender lo que 'gcc' está haciendo, páselo por el indicador' -v'. –