Конфликты статических и общих библиотечных символов?

У меня есть проект, работающий над 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 в режиме отладки, а затем в обычном режиме снова, кажется, сбила что-то и заставила его работать снова, не зная, что происходит.

Ответы на вопрос(3)

Ваш ответ на вопрос