2011-11-08 8 views
7

avevo installato il pacchetto libtcmalloc-minimal0Collegamento con ubuntu libtcmalloc

ma quando provo a compilare il mio programma con la bandierina

-ltcmalloc-minimal0

sto errore ottenendo

/usr/bin/ld: impossibile trovare -ltcmalloc_minimal0

avevo controllato/usr/lib e la libreria è lì

Ulteriori informazioni

dpkg dà seguito 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 

e sono la compilazione per la modalità a 64 bit

e la libreria è anche 64 bit

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

Is ha chiamato esattamente '/ usr/lib/libtcmalloc_minimal0.so'? La biblioteca è l'architettura giusta? (potresti compilare in modalità a 64 bit, mentre la libreria che hai installato è a 32 bit) – wormsparty

+0

sia la libreria che il programma sono a 64 bit –

+0

Quindi quale parte del codice richiederebbe libtcmalloc-minimal? L'istruzione new/delete lo richiede? – Naveen

risposta

6

Non è possibile collegare semplicemente in un file con -l se non finisce esattamente con .so, dal momento che la linker presuppone una particolare convenzione di denominazione (lib*.so).

avete diverse scelte:

  • Installare libtcmalloc-minimal0-dev se esiste, che dovrebbe fornire il collegamento dinamico .so.

  • Creare il link simbolico da soli: cd /usr/lib; ln -s libtcmalloc_minimal.so.0.0.0 libtcmalloc_minimal.so; cd -

  • link direttamente alla biblioteca senza il collegamento simbolico utilizzando gcc test.c /usr/lib/libtcmalloc_minimal.so.0.0.0

  • collegamento utilizzando l'opzione -l utilizzando il nome completo: -l:libtcmalloc_minimal.so.0.0.0

+0

Quindi quale parte del codice richiederebbe libtcmalloc-minimal? Le istruzioni new/delete lo richiedono? – Naveen

0

Esecuzione dpkg -L libtcmalloc-minimal0 vi mostrerà che la biblioteca è /usr/lib/libtcmalloc_minimal.so.0 quindi l'opzione corretta dovrebbe essere -ltcmalloc_minimalsenza alcuna cifra

+1

stesso errore con ltcmalloc_minimal vedere la modifica per vedere dpkg o/p –

+1

forse è necessario eseguire 'ldconfig'. Per capire cosa sta facendo 'gcc', passa il flag' -v'. –