Я пробовал этот пример libPNG, но он не удался при компиляции.Я использовал gcc -lm -lpng makePNG.c
для компиляции и получил следующую ошибку:
/tmp/ccgGO8zw.o: In function `writeImage':
makePNG.c:(.text+0x360): undefined reference to `setRGB'
collect2: error: ld returned 1 exit status
Я удалил определения функций и просто переместил функции так, чтобы они были в следующем порядке:
void setRGB(png_byte *ptr, float val)
int writeImage(char* filename, int width, int height, float *buffer, char* title)
float *createMandelbrotImage(int width, int height, float xS, float yS, float rad, int maxIteration)
int main(int argc, char *argv[])
И это сработало.Мой вопрос: почему это не сработало раньше?SetRGB был определен до writeImage, так как же ссылка 'setRGB' может быть неопределенной?
Редактировать:
Я забыл упомянуть кое-что, что теперь я понимаю, очень важно.Я удалил ключевое слово inline из функции setRGB.Я попытался скомпилировать с ключевым словом inline, и у него было то же сообщение об ошибке.Ясно, что моя проблема связана с ключевым словом inline, а не с предварительными объявлениями, как я изначально думал ...