У меня есть проект, работающий над этим, использующий FreeImage и openCV, в настоящее время мы используем поддержку jpeg от обоих из них (я работаю над исправлением этого, но сейчас он должен остаться). В любом случае FreeImage компилирует libjpeg 7.0 в свои статические библиотеки, а библиотека highCi openCV связывает ее как общую библиотеку (в моей системе, Ubuntu 9, у меня установлен libjpeg 6.2).
Они ссылаются на конечную библиотеку, которая используется для связи с различными программами, java-обертками и т. Д. Все это прекрасно работает, никаких конфликтов символов или чего-либо еще во время компиляции / компоновки. Однако когда я открываю изображение с помощью функции openCV cvLoadImage, оно умирает при чтении заголовка, скорее всего из-за различий между заголовками в 6.2 и 7.0.
Если я отсоединяю FreeImage (и закомментирую код, который требует этого), вызовы openCV снова начинают работать, поэтому очевидно, что статические символы libjpeg из FreeImage конфликтуют с символами, которые будут загружены из общей библиотеки libjpeg. Я не могу понять, почему мой компилятор не выдает ошибку во время компоновки из-за двух наборов символов libjpeg. Кроме того, я попытался временно заменить заголовок jpeglib.h моей системы версией 7.0, чтобы посмотреть, будет ли скомпилированная с этим openCV синхронизироваться с символами, которые freeimage вносит в таблицу, но безрезультатно.
Наконец, я поместил printf в jpeg_read_header в libjpeg, который компилирует freeimage, и перестроил его, чтобы посмотреть, использует ли openCV определение libipeg freeimage. Он не распечатывался, поэтому я должен предположить, что нет.
Так что я думаю, мои вопросы
1) Почему связывание статического libjpeg и общего libjpeg не приводит к ошибкам связывания из-за дублирования символов?
2) Кто-нибудь знает, почему эти две вещи противоречат друг другу?
Редактировать: Компиляция openCV в режиме отладки, а затем в обычном режиме снова, кажется, сбила что-то и заставила его работать снова, не зная, что происходит.