libpng warning: Incompatible libpng version in Anwendung und Bibliothek
Ich habe eine Anwendung, die hängt von einer Vielzahl von Bibliotheken (wir alle nicht). Die meisten dieser Bibliotheken sind installiert über den Paket-manager. Für diejenigen, die nicht, ich habe neu kompiliert, aber ich bekomme immer noch die gleiche libpng Unverträglichkeit Fehler.
libpng warning: Application was compiled with png.h from libpng-1.2.44
libpng warning: Application is running with png.c from libpng-1.4.3
Es ist ein Fehler, weil die resultierenden Puffer leer ist. Wie kann ich wissen, welche Bibliothek ist die Verknüpfung auf den neuen und die Bibliothek verknüpft ist die alte?
ldd <executable-name>
...
libpng12.so.0 => /lib/x86_64-linux-gnu/libpng12.so.0 (0x00007f5a0660f000)
...
Läuft locate png.h
gibt mir ein paar system-level-Dateien
/usr/include/png.h
/usr/include/libpng12/png.h
Alle 1.2.44.
Ich bin mit Ubuntu 11.04 x86-64.
UPDATE: Stellt sich heraus, OpenCV Schiffe mit Ihrer eigenen version von libpng, die 1.4.3
- Welche Plattform?
- Chu - ich stehe vor das gleiche problem, da Sie fanden heraus, dass OpenCV Schiffe Ihre eigene version von libpng, was soll ich tun, um meinen code kompilieren, richtig?welche der 2 folgenden Vorschläge hast, kannst du Folgen? vielen Dank für Ihre Hilfe!
Du musst angemeldet sein, um einen Kommentar abzugeben.
Es sieht aus wie Ihre Anwendung ist dynamisch verknüpfen eine
.so
library-Datei installiert, an einem anderen Ort als der header, die Sie verwenden. Sie könnenldd <binary>
um herauszufinden, welche.so
Ihre binäre abholen, und dann greifen die header-Datei aus diesem Verzeichnis (es sei denn, es ist ein system-Verzeichnis), anstelle des einen, die Sie verwenden. Sie würde dies tun, indem Sie Ihre-I
flag beim kompilieren. Ansonsten denke ich, dass Sie installieren müssenlibpng-1.4.3
so können Sie kompilieren gegen die Header.Mark B erklärt es schon.
jetzt aggain für Matteo
Ihr linker nimmt den ersten Auftritt von libpng. das scheint verschachtelt werden
in OpenCV. Schauen Sie in Ihrem Makefile und setzen Sie Ihre lokale version vor
das zählen von OpenCV, die in den Includes. In meinem Fall:
-I/usr/include/libpng12 -lpng12 [ ... ] -L/usr/local/lib -lopencv_core
Wie bereits in Ihrer Frage, OpenCV hat Schiff mit seiner eigenen version von libpng, aber Sie können sich dafür entscheiden, verwenden Sie die version der libpng auf Ihrem system installiert haben statt. Sie können dies nur tun, wenn Gebäude von OpenCV source: deaktivieren BUILD_PNG beim laufen cmake.
Grund: OpenCV/CMakeLists.txt Datei:
Möglichkeiten:kompilieren Sie Ihre opencv wieder, und verwenden Sie das param: