2016-11-22 22 views
1

Я использую libjpeg ver.9b (статический lib) в моем коде JNI. Я скомпилировал все успешно и получил его, пока не коснусь jpeg-части. Консоль читает:Libjpeg 9b static lib on Ubuntu: параметр JPEG struct mismatch

JPEG parameter struct mismatch: library thinks size is 664, caller expects 632 

Я искал вокруг и нашел большинство людей, указывающих на дублируется разделяемые библиотеки. Я думаю, что могу это исключить, так как я удалил все библиотеки libjpeg на машине (без остатка libjpeg.so) и статически привязал его к моему коду. Библиотека libjpeg была построена на той же машине после Compiling libjpeg и с CFLAGS = "- O3 -fPIC". Любые идеи, в которых проблема, и как ее исправить?

ответ

0

Это похоже на то, что в системе могут быть некоторые заголовки другой версии библиотеки. Удалили ли вы предыдущие библиотеки, удалив пакеты с помощью системы упаковки или просто удалили библиотеки вручную? (Тогда заголовки все еще может оставаться в системе - как правило, в /usr/include или /usr/local/include)

В вашем other question, я не вижу, что вы должны указать пути к библиотеке JPEG явно в командной строке. Поэтому, если вы не установили библиотеку в местоположения по умолчанию после ее создания, попробуйте передать путь include явно на -I /path/to/correct_jpeg_headers.

Вы также можете попытаться найти местоположение других заголовков, например, с помощью:

find /usr -name "jpeglib.h" 

Обратите внимание, что даже если вы связать со статической библиотекой, это все еще возможно, что статическая библиотека была строить с разными заголовками, чем клиент использует, поэтому может быть несоответствие структуры (нарушение ODR), хотя оно может быть успешно связано.

+0

Спасибо. Оказывается, я использовал разные заголовки, хотя они оба ver.9b. При компиляции библиотеки libjpeg я использовал набор, созданный при запуске всего процесса (который выполнялся с помощью configure-> make-> make install), затем я напрямую использовал заголовки в загруженном исходном коде (до make) для справки. –