Связывание (или правильная установка и связывание) библиотеки jpeg-8d

Мне нужны возможности обработки JPEG в моем проекте, поэтому я решил использовать библиотеку jpeg-8d, после загрузки пакетов, которые я сделал обычным ./configure; make and make install, make test не возвращает никаких ошибок и никаких проблем не было сообщено в течение всего процесса, но когда я открыл example.c в Code Blocks 10.05 компиляция не удалась. Я «погуглил» некоторые решения и добавил

#ifdef __cplusplus
extern "C" {
#endif
...
#ifdef __cplusplus
}
#endif

В jpeglib.h перекомпилировал файл, затем добавил эти строки в секцию компоновщика блоков кода:
/usr/local/lib/libjpeg.a
/usr/local/lib/libjpeg.so
также добавлены соответствующие каталоги в раздел каталогов.
но компилятор все еще не может скомпилировать example.c, вот некоторые из ошибок:

> /home/raff/CodeBlocks/jpeg-8d/example.c|116|warning: incompatible implicit declaration of built-in function ‘exit’|
> example.c|| undefined reference to 'image_width'
> example.c|| undefined reference to 'image_height'

Если кто-то успешно установил и использовал библиотеку jpeg, пожалуйста, помогите, у меня нет проблем с переключением IDE и / или дистрибутива Linux.

3

Решение

Ваша установка библиотеки, кажется, в порядке (в противном случае он будет жаловаться на отсутствие jpeglib.h во время компиляции)

Файл example.c должен быть частью документации, а не кодом, который вы можете скомпилировать и использовать. Обратите внимание, что нет main(), например. Вы должны использовать его как справочную информацию о том, как кодировать методы для сжатия и распаковки файлов JPEG.

Переменные image_width а также image_height (а также image_buffer) объявлены как externпоэтому они должны быть определены в каком-то другом файле. Вы можете написать свою программу, определяющую эти переменные и заполняющую буфер, и только после этого вы можете использовать предоставленные методы (write_JPEG_file а также read_JPEG_file).

1

Другие решения

  1. Вы связываетесь со статической или общей библиотекой?
  2. Если это статично, вы размещаете это после объектные файлы в командной строке компоновщика?
  3. Если он используется совместно, и вы используете более новую цепочку инструментов, это также может быть проблемой.
  4. Если вы делаете правильные ссылки, что показывает readelf -s в общей библиотеке? Что nm показывает в статической библиотеке?
0

Я был настолько уверен, что example.c на самом деле был примером использования этой библиотеки, что я не проверял ее содержимое. Более того, было еще несколько проблем.
После написания правильной программы я обнаружил ошибку:

error while loading shared libraries libjpeg.so.8: cannot open shared object file: No such file or directory

Но это было исправлено с помощью этой пары команд оболочки:

ranlib /usr/local/lib/libjpeg.a
ldconfig /usr/local/lib

Надеюсь это поможет.

0
По вопросам рекламы [email protected]