Symbolkonflikte bei statischen und gemeinsam genutzten Bibliotheken?

Ich arbeite an einem Projekt, das FreeImage und openCV verwendet. Derzeit verwenden wir die JPEG-Unterstützung von beiden (ich arbeite daran, das zu beheben, aber im Moment muss es bleiben). Wie auch immer, FreeImage kompiliert libjpeg 7.0 in seine statischen Bibliotheken und die highgui-Bibliothek von openCV verknüpft es als gemeinsam genutzte Bibliothek (auf meinem System, Ubuntu 9, habe ich libjpeg 6.2 installiert).

Sie werden in eine endgültige Bibliothek eingebunden, die zum Einbinden in verschiedene Programme, Java-Wrapper usw. verwendet wird. Das alles funktioniert einwandfrei, es gibt keine Symbolkonflikte oder ähnliches während der Kompilierungs- / Verknüpfungszeit. Wenn ich jedoch ein Bild mit der openCV-Funktion cvLoadImage öffne, stirbt es beim Lesen des Headers, wahrscheinlich aufgrund von Unterschieden zwischen den Headern in 6.2 und 7.0.

Wenn ich die Verknüpfung von FreeImage aufhebe (und den erforderlichen Code auskommentiere), funktionieren die openCV-Aufrufe wieder, sodass die statischen libjpeg-Symbole von FreeImage eindeutig mit Symbolen in Konflikt stehen, die aus der gemeinsam genutzten libjpeg-Bibliothek geladen würden. Was ich nicht herausfinden kann, ist, warum mein Compiler beim Verknüpfen aufgrund der beiden Sätze von libjpeg-Symbolen keinen Fehler auslöst. Außerdem habe ich versucht, den jpeglib.h-Header meines Systems vorübergehend durch die 7.0-Version zu ersetzen, um zu sehen, ob OpenCV, das damit kompiliert wurde, mit den Symbolen synchronisiert wird, die freeimage auf den Tisch bringt, ohne Erfolg, wie es scheint.

Zuletzt habe ich ein printf in jpeg_read_header in das libjpeg eingefügt, das freeimage kompiliert, und es erneut erstellt, um festzustellen, ob openCV die freeimage libjpeg-Definition verwendet. Es wurde nicht ausgedruckt, also muss ich davon ausgehen, dass es nicht so ist.

Also denke ich meine Fragen sind

1) Warum erzeugt das Verknüpfen eines statischen libjpeg und eines freigegebenen libjpeg keine Verknüpfungsfehler aufgrund doppelter Symbole?

2) Weiß jemand, warum diese beiden Dinge miteinander in Konflikt stehen?

Edit: Kompilieren von openCV im Debug-Modus und dann wieder im regulären Modus scheint etwas losgeworden zu sein und es wieder zum Laufen gebracht zu haben, keine Ahnung, was los ist.

Antworten auf die Frage(3)

Ihre Antwort auf die Frage