2014-08-28 20 views
7

Sto cercando di accedere ai dati del pixel png nel mio codice C. Ho trovato questa libreria libpng. Ho scaricato l'ultima versione da questo sito, sto usando Ubuntu 14.04. Ho seguito le istruzioni nel file INSTALL. Tutto andò bene. E poi ho provato a compilare con gcc questo pezzo di code. Ma ho ricevuto questo:Come installare libpng correcly?

/tmp/ccWa9LDO.o: In function `read_png_file': 
test.c:(.text+0x13c): undefined reference to `png_sig_cmp' 
test.c:(.text+0x16f): undefined reference to `png_create_read_struct' 
test.c:(.text+0x1a0): undefined reference to `png_create_info_struct' 
test.c:(.text+0x1db): undefined reference to `png_set_longjmp_fn' 
test.c:(.text+0x20c): undefined reference to `png_init_io' 
test.c:(.text+0x220): undefined reference to `png_set_sig_bytes' 
test.c:(.text+0x239): undefined reference to `png_read_info' 
test.c:(.text+0x252): undefined reference to `png_get_image_width' 
test.c:(.text+0x271): undefined reference to `png_get_image_height' 
test.c:(.text+0x290): undefined reference to `png_get_color_type' 
test.c:(.text+0x2af): undefined reference to `png_get_bit_depth' 
test.c:(.text+0x2c4): undefined reference to `png_set_interlace_handling' 
test.c:(.text+0x2e3): undefined reference to `png_read_update_info' 
test.c:(.text+0x2fc): undefined reference to `png_set_longjmp_fn' 
test.c:(.text+0x36f): undefined reference to `png_get_rowbytes' 
test.c:(.text+0x3b2): undefined reference to `png_read_image' 
/tmp/ccWa9LDO.o: In function `write_png_file': 
test.c:(.text+0x430): undefined reference to `png_create_write_struct' 
test.c:(.text+0x461): undefined reference to `png_create_info_struct' 
test.c:(.text+0x49c): undefined reference to `png_set_longjmp_fn' 
test.c:(.text+0x4cd): undefined reference to `png_init_io' 
test.c:(.text+0x4e6): undefined reference to `png_set_longjmp_fn' 
test.c:(.text+0x559): undefined reference to `png_set_IHDR' 
test.c:(.text+0x572): undefined reference to `png_write_info' 
test.c:(.text+0x58b): undefined reference to `png_set_longjmp_fn' 
test.c:(.text+0x5bf): undefined reference to `png_write_image' 
test.c:(.text+0x5d8): undefined reference to `png_set_longjmp_fn' 
test.c:(.text+0x607): undefined reference to `png_write_end' 
/tmp/ccWa9LDO.o: In function `process_file': 
test.c:(.text+0x692): undefined reference to `png_get_color_type' 
test.c:(.text+0x6be): undefined reference to `png_get_color_type' 
test.c:(.text+0x6db): undefined reference to `png_get_color_type' 
collect2: error: ld returned 1 exit status 

Non capisco perché mi aspetterei che se c'è un problema con l'installazione vorrei avere errori solo per l'inclusione png.h. Qualcuno ha qualche idea?

+1

Avete installato libpng12-dev? sudo apt-get install libpng12-dev i file richiesti per usarlo nello sviluppo sono generalmente in un pacchetto -dev su Debian e derivate. – deepy

+2

Sembra che tu non stia collegando la libreria libpng. –

+0

@deepy quelli sono generalmente i file di intestazione. L'OP ha un errore * linker, * però, e non un errore del compilatore. –

risposta

12

Lei ha detto nei commenti che si utilizza gcc my_code.c, provare

gcc my_code.c -lpng 

I -l link di bandiera una biblioteca, in questo caso libpng12-dev.

Collegamento significa che il compilatore aggiunge il codice da tutti i file oggetto per creare un singolo file eseguibile. I file oggetto sono i file di codice sorgente compilati separati (i file .o).

+0

grazie, questo ha aiutato con la compilazione. Ora ho problemi con l'esecuzione del programma. Viene visualizzato questo messaggio di errore: './a.out: errore durante il caricamento delle librerie condivise: libpng16.so.16: impossibile aprire il file oggetto condiviso: nessun file o directory' – traped

+0

Cosa succede quando si prova 'gcc my_code.c -lpng12 '? – tversteeg

+0

Penso che i numeri lì rappresentino solo la versione di quella libreria. Quando provo 'gcc my_code.c -lpng12' ottengo poche righe di questi:' test.c :(. Testo + 0x1db): riferimento non definito a \ 'png_set_longjmp_fn''. Ho provato anche 'gcc my_code.c -lpng16' e l'errore di comnent sopra continua a persistere. – traped

-1

Penso che tu abbia installato solo la libreria di elaborazione PNG. Dovrai installare i file di intestazione che possono fare riferimento alla libreria installata. Così Installare il pacchetto 'dev' anche in questo modo

 sudo apt-get install libpng12-dev
+1

Ovviamente ha i file di intestazione, poiché ha ottenuto la compilazione. È il collegamento che sta fallendo. –