Доброго времени суток.
Крайне интересует вопрос, каким образом правильно собирать сторонние библиотеки при помощи инструментов MSYS и MinGW, а так же включать собранные библиотеки в код.
Собственно, суть конкретной ситуации:
Возникла необходимость работы с изображениями (увеличение контрастности и обрезка изображения), поиск в гугле указал мне на библиотеку libgd, вместе с которой были скачены и дополнительные модули для работы с jpeg,png,tff и так далее ( ссылка на libgd -
https://libgd.github.io/ ).
После ОЧЕНЬ долгих мучений, различными правдами и неправдами был собран libgd.dll и libgd.a.
Насколько я понимаю, libgd.a - библиотека для MinGW
www.cyberforum.ru/cpp-beginners/thread978847.html :
Библиотеки для MinGW имеют расширенее .a и префикс lib ( т.е. libsndfile-1.a ).
Тебе нужно либо скачать библиотеки для MinGW, либо собрать их собственноручно.
Теперь вопрос.
Есть простейший пример, который был взят исключительно на проверку работоспособности:
/* Bring in gd library functions */
#include "src/gd.h"
/* Bring in standard I/O so we can output the PNG to a file */
#include <stdio.h>
int main() {
/* Declare the image */
gdImagePtr im;
/* Declare output files */
FILE *pngout, *jpegout;
/* Declare color indexes */
int black;
int white;
/* Allocate the image: 64 pixels across by 64 pixels tall */
im = gdImageCreate(64, 64);
/* Allocate the color black (red, green and blue all minimum).
Since this is the first color in a new image, it will
be the background color. */
black = gdImageColorAllocate(im, 0, 0, 0);
/* Allocate the color white (red, green and blue all maximum). */
white = gdImageColorAllocate(im, 255, 255, 255);
/* Draw a line from the upper left to the lower right,
using white color index. */
gdImageLine(im, 0, 0, 63, 63, white);
/* Open a file for writing. "wb" means "write binary", important
under MSDOS, harmless under Unix. */
pngout = fopen("test.png", "wb");
/* Do the same for a JPEG-format file. */
jpegout = fopen("test.jpg", "wb");
/* Output the image to the disk file in PNG format. */
gdImagePng(im, pngout);
/* Output the same image in JPEG format, using the default
JPEG quality setting. */
gdImageJpeg(im, jpegout, -1);
/* Close the files. */
fclose(pngout);
fclose(jpegout);
/* Destroy the image in memory. */
gdImageDestroy(im);
}
Пытаюсь скомпилировать в командной строке исходный код, получаю следующее (пустые строки добавлены для повышения читабельности):
C:\CPPImageCorrecing>g++ CPPImageCorrector.cpp -o CPPImageCorrector.exe
C:\Users\0BD6~1\AppData\Local\Temp\ccy0WVTF.o:CPPImageCorrector.cpp:(.text+0x26)
: undefined reference to `_imp__gdImageCreate@8'
C:\Users\0BD6~1\AppData\Local\Temp\ccy0WVTF.o:CPPImageCorrector.cpp:(.text+0x51)
: undefined reference to `_imp__gdImageColorAllocate@16'
C:\Users\0BD6~1\AppData\Local\Temp\ccy0WVTF.o:CPPImageCorrector.cpp:(.text+0x7c)
: undefined reference to `_imp__gdImageColorAllocate@16'
C:\Users\0BD6~1\AppData\Local\Temp\ccy0WVTF.o:CPPImageCorrector.cpp:(.text+0xb6)
: undefined reference to `_imp__gdImageLine@24'
C:\Users\0BD6~1\AppData\Local\Temp\ccy0WVTF.o:CPPImageCorrector.cpp:(.text+0xfb)
: undefined reference to `_imp__gdImagePng@8'
C:\Users\0BD6~1\AppData\Local\Temp\ccy0WVTF.o:CPPImageCorrector.cpp:(.text+0x11a
): undefined reference to `_imp__gdImageJpeg@12'
C:\Users\0BD6~1\AppData\Local\Temp\ccy0WVTF.o:CPPImageCorrector.cpp:(.text+0x140
): undefined reference to `_imp__gdImageDestroy@4'
collect2.exe: error: ld returned 1 exit status
Огромная просьба знающим людям, объясните, Что Я Делаю Не Так?