Библиотека CImg не компилируется в Dev С++

Я установил dev С++ на свой компьютер и пытаюсь скомпилировать с ним простой код C++ hello world, но он не компилируется и выдает эти коды ошибок

C:\Users\Ignatius\Documents\testing.o   testing.cpp:(.text$_ZN12cimg_library11CImgDisplay5paintEv[__ZN12cimg_library11CImgDisplay5paintEv]+0xb2): undefined reference to `_imp__SetDIBitsToDevice@48'

C:\Users\Ignatius\Documents\collect2.exe    [Error] ld returned 1 exit status

25      C:\Users\Ignatius\Documents\Makefile.win    recipe for target 'test.exe' failed

Код, который я использовал, был

main.cpp

#include "CImg.h"

using namespace cimg_library;

int main()
{
    CImg<unsigned char> img(640, 400, 1, 3);
    img.fill(0);
    unsigned char purple[] = {225, 0, 225};
    img.draw_text(100, 100, "Hello world", purple);
    img.display("My first CImg code");
    system("pause");
    return 0;
}

На данный момент это мой единственный файл. Я загрузил CImg онлайн и перекинул папки в правильный каталог, а файл .h в правильный каталог, он не дает синтаксических ошибок, но не компилируется, может кто-нибудь мне помочь?

В Makefile.win строки, выделенные в ассемблерном коде, были (если это поможет)

$(BIN): $(OBJ)
$(CPP) $(LINKOBJ) -o $(BIN) $(LIBS)

person user6031759    schedule 01.05.2016    source источник
comment
Вам нужно связать правильную библиотеку - судя по всему, библиотеку cimg. Прочтите документы CImg   -  person Martin Bonner supports Monica    schedule 01.05.2016
comment
Что ты имеешь в виду? Я сделал то, что мне было приказано   -  person user6031759    schedule 01.05.2016


Ответы (1)


CImg — это библиотека только для заголовков, поэтому вам не нужно связываться с ней. Все, что вам нужно сделать, это определить, где находится CImg.h, и сообщить компилятору с помощью -I thatplace.

Итак, если CImg.h находится в /opt/fred, вы должны сделать

c++ program.c -I /opt/fred -o program

Если вам нужно сослаться на библиотеку, такую ​​как gdi32, вам, вероятно, потребуется добавить -lgdi32 в конец:

c++ program.c -I /opt/fred -lgdi32 -o program
person Mark Setchell    schedule 01.05.2016
comment
Чего ждать? А что, если я хочу протестировать его на dev C++? - person user6031759; 01.05.2016
comment
Я поместил файл .h в C:\Program Files\Dev-Cpp\MinGW64\x86_64-w64-mingw32\include - person user6031759; 01.05.2016
comment
Это проблема разработчиков С++. Все, что я хочу сказать, это то, что с CImg нет библиотек, с которыми вы должны связываться, и что все, что вам нужно сделать, это указать компилятору, где находятся файлы заголовков, то есть файлы Include, с помощью переключателя -I или как вы это делаете в dev C++. - person Mark Setchell; 01.05.2016
comment
Хорошо... так как мне включить их в мой проект? - person user6031759; 01.05.2016
comment
Все, что я делаю, это пытаюсь сделать небольшую программу с графическим интерфейсом. - person user6031759; 01.05.2016
comment
Это облегчение, мне не нужны эти другие файлы, но как мне включить их в мою среду разработки C++ IDE? - person user6031759; 01.05.2016
comment
Я предполагаю, что dev C++ - это графическая среда разработки, и у нее будет настройка сборки или что-то вроде пути поиска файла заголовка или включить путь. - person Mark Setchell; 01.05.2016
comment
@MarkSetchell: посмотрите на ошибку. Это исходит от ld - компоновщика, а не от компилятора. Таким образом, мы знаем, что это не ошибка при поиске заголовочного файла. Не удается найти скомпилированную функцию. Если это не функция CImg, это должна быть функция Windows API, поэтому OP необходимо активировать переключатель dev C++ для ссылки на функции Windows API. - person Martin Bonner supports Monica; 01.05.2016
comment
О, так как мне это сделать? мне очень нужна эта библиотека - person user6031759; 01.05.2016
comment
Google SetDIBitsToDevice. Вы найдете страницу MSDN. Это говорит вам связать с gdi32.lib. Поэтому добавьте gdi32.lib (или, возможно, -lgdi32 в среде msys/mingw/cygwin) в LIBS. - person Zastai; 01.05.2016
comment
Я вижу это, так что это должно делать? Я помещаю это в файл? - person user6031759; 03.05.2016
comment
@user6031759 user6031759 Похоже, CImg использует GDI для отображения, поэтому вам нужно связать с библиотекой GDI. Это означает, что вам нужно убедиться, что LIBS (который вы показываете в своем вопросе) содержит путь к тому месту, где находится файл gdi32.lib. Итак, используйте любые инструменты, предоставляемые Windows, чтобы найти gdi32.lib, а затем поместите путь к содержащему каталогу в свою переменную LIBS. - person Mark Setchell; 03.05.2016
comment
О, ладно, gdi32.lib уже есть в моей системе Windows? Как я могу связать его? - person user6031759; 10.05.2016
comment
Я добавил это сейчас - пожалуйста, попробуйте еще раз. - person Mark Setchell; 10.05.2016