CImg.h не может работать в среде Xcode

*****Код*****

#include "CImg.h"
#include <stdlib.h>

using namespace cimg_library;

int main() {

    CImg<unsigned char> image("lena.png");

    image.display();

    return 0;

}

*****ОШИБКА****** Сборка прошла успешно, но где-то застряла: ВЫВОД:

[CImg] * CImgIOException * [экземпляр (0,0,0,0,0x0, не общий)] CImg::load(): не удалось открыть файл 'lena.png'. libc++abi.dylib: завершение работы с необработанным исключением типа cimg_library::CImgIOException: [экземпляр (0,0,0,0,0x0, не общий)] CImg::load(): не удалось открыть файл 'lena. png'.


person 郭昆鹏    schedule 03.03.2018    source источник
comment
Это проблема линковки, компоновщик не нашел эти функции. Вы можете попробовать проверить, добавили ли вы фреймворки/библиотеки в свой проект.   -  person user9335240    schedule 04.03.2018
comment
Похоже, что библиотека CImg использует систему X Window, с которой вы не связываетесь.   -  person Some programmer dude    schedule 04.03.2018
comment
После добавьте фреймворк libX11.6.dylib. Осталась только 1 ОШИБКА.   -  person 郭昆鹏    schedule 04.03.2018
comment
ОШИБКА: не найдена библиотека для -lX11.6   -  person 郭昆鹏    schedule 04.03.2018


Ответы (1)


Если вы хотите использовать CImg в macOS, вам нужно сделать несколько вещей.

Шаг 1 - Поддержка PNG

Если вы хотите, чтобы CImg мог открывать файлы PNG, вы должны сначала установить libpng и libz, что можно сделать с помощью homebrew следующим образом:

brew install libpng

Затем вы должны сообщить CImg, что хотите включить поддержку файлов PNG, что вы делаете, объявляя определение before, включая CImg.h

#define cimg_use_png 1
#include "CImg.h"

Затем вы должны сообщить Xcode, где находится библиотека. Это проще всего через pkgconfig, поэтому установите его с помощью:

brew install pkg-config

Теперь вы можете получить путь к файлам заголовков (#includes) с помощью:

pkg-config --cflags /usr/local/lib/pkgconfig/libpng.pc

Вывод

-I/usr/local/Cellar/libpng/1.6.34/include/libpng16

Это говорит вам, что нужно указать в Xcode для путей к файлам заголовков. Затем вам нужно найти настройки Linker с помощью:

pkg-config --libs /usr/local/lib/pkgconfig/libpng.pc

Вывод

-L/usr/local/Cellar/libpng/1.6.34/lib -lpng16 -lz

Поэтому вы должны поместить это в Xcode в качестве пути для связанных библиотек и имен библиотек, на которые нужно ссылаться.

Шаг 2 - Поддержка X11

Как только вы это сделаете, и только если вы хотите отображать изображения на экране, вам нужно настроить XQuartz, потому что macOS больше не поставляется с сервером X11. .

Итак, перейдите на этот веб-сайт, загрузите и установите XQuartz. Затем вам нужно будет указать Xcode, где находятся заголовки (#includes) для XQuartz, а именно:

/opt/X11/include

а также как связать с ним:

-L /opt/X11/lib -lX11

Есть несколько полезных скриншотов мест в Xcode, которые вам нужно изменить в моем ответе на этот вопрос.

person Mark Setchell    schedule 04.03.2018