2014-08-28 4 views
7

Ich versuche auf png Pixeldaten in meinem C-Code zuzugreifen. Ich habe diese Bibliothek gefunden libpng. Ich habe die neueste Version von dieser Seite heruntergeladen, ich benutze Ubuntu 14.04. Ich folgte den Anweisungen in der Datei INSTALL. Alles gut gelaufen. Und dann habe ich versucht, mit gcc dieses Stück code zu kompilieren. Aber ich erhielt diese:Wie installiere ich libpng korrekt?

/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 

Ich verstehe es nicht, weil ich würde erwarten, dass, wenn es bei der Installation Problem ist, würde ich Fehler bekommt nur png.h mitgeschickt werden soll. Jeder hat eine Idee?

+1

Haben Sie libpng12-dev installiert? sudo apt-get install libpng12-dev Die Dateien, die für die Verwendung in der Entwicklung benötigt werden, befinden sich im Allgemeinen in einem Paket -dev auf Debian und Derivaten. – deepy

+2

Es scheint, dass Sie nicht mit der libpng-Bibliothek verknüpfen. –

+0

@deepy das sind in der Regel die Header-Dateien. OP hat jedoch einen Linker-Fehler * und keinen Compiler-Fehler. –

Antwort

12

sagte Sie in den Kommentaren, die Sie gcc my_code.c verwenden, versuchen

gcc my_code.c -lpng 

Die -l Flagge Links eine Bibliothek, in diesem Fall libpng12-dev.

Verknüpfen bedeutet, dass der Compiler den Code aus allen Objektdateien hinzufügt, um eine einzelne ausführbare Datei zu erstellen. Die Objektdateien sind die separaten kompilierten Quellcodedateien (.o Dateien).

+0

danke, das half bei der Zusammenstellung. Jetzt habe ich ein Problem mit dem Programm. Ich bekomme diese Fehlermeldung: './a.out: Fehler beim Laden freigegebener Bibliotheken: libpng16.so.16: kann keine gemeinsame Objektdatei öffnen: Keine solche Datei oder Verzeichnis ' – traped

+0

Was passiert, wenn Sie' gcc my_code.c -lpng12 versuchen '? – tversteeg

+0

Ich denke, dass Zahlen dort nur Version dieser Bibliothek darstellt. Wenn ich 'gcc my_code.c -lpng12' versuche, bekomme ich einige Zeilen davon:' test.c :(. Text + 0x1db): undefinierter Verweis auf \ 'png_set_longjmp_fn''. Ich habe 'gcc my_code.c -lpng16' auch ausprobiert und der Fehler von oben ist immer noch vorhanden. – traped

-1

Ich glaube, Sie haben nur die PNG-Verarbeitungsbibliothek installiert. Sie müssen die Header-Dateien installieren, die auf die installierte Bibliothek verweisen können. So auch Installieren 'dev' Paket wie dieses

 sudo apt-get install libpng12-dev
+1

Er hat offensichtlich die Header-Dateien, seit er kompiliert hat. Es ist die Verbindung, die versagt. –