Процесс сборки программы и ошибки LNK2019
LNK2019 — распространенная ошибка у тех, кто первый раз добрался до использования внешних библиотек. Она является следствием используемого в компиляторах С/С++ подхода с разделением файлов с объявлением (*.h) и описанием (*.c|*.cpp|*.cxx). В отличии от компиляторов Pascal/Delphi, в файлах .h нет информации о том, откуда брать указатель на внешнюю функцию.
Сборщику программы дается информация по всем используемых в программе файлам библиотек (.lib для MSVC++, .so, .a для GCC/MinGW), который сопоставляет каждому имени функции ее адрес.
LNK2019 возникает, когда компоновщик не знает, какой адрес подставить вместо некоторого заданного имени функции.
При использовании:
1. MSVC++, самым простым способом является использовать специфичную для него директиву, ее необходимо добавить в любой из файлов *.cpp|*.c :
#pragma comment(lib, "название-библиотеки.lib")
2. GCC/MinGW, необходимо добавить опцию -lимя_библиотеки на этапе сборки.
При использовании IDE Code::Blocks необходимо добавить библиотеку через Project->Build options...->Linker settings->Link libraries->Add
Пара примеров возникновения ошибки:
[DevIL, msvc++]