Ukio_G
@Ukio_G
Незамысловатый юноша.

Как собрать подключить сторонние библиотеки в C++ проекте?

Доброго времени суток.
Крайне интересует вопрос, каким образом правильно собирать сторонние библиотеки при помощи инструментов 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


Огромная просьба знающим людям, объясните, Что Я Делаю Не Так?
  • Вопрос задан
  • 3072 просмотра
Решения вопроса 1
GavriKos
@GavriKos
Вы не указали линковщику путь к библиотеке, и он не знает где брать реализации методов из заголовочного файла gd.h
Ответ написан
Пригласить эксперта
Ваш ответ на вопрос

Войдите, чтобы написать ответ

Войти через центр авторизации
Похожие вопросы