Неопределенная ссылка на очень простую программу - PullRequest
5 голосов
/ 07 декабря 2011

Как только я установил Ubuntu 11.10, появляется странная ошибка. Я хочу использовать GD с моей программой на C, поэтому я установил пакет "libgd2-xpm-dev". Все было установлено - файлы gd.h и libgd.a находятся в / usr / include и в / usr / lib. Итак, я попытался скомпилировать простую программу с GD.

#include <stdio.h>
#include <gd.h>

int main()
{
        gdImagePtr im, im_clear;
        int black, white;
        FILE *out1;

        im = gdImageCreate(100, 100);
        im_clear = gdImageCreate(100, 100);

        white = gdImageColorAllocate(im, 255, 255, 255);
        black = gdImageColorAllocate(im, 0, 0, 0);
        return 0;
}

$ gcc -lgd gd.c
/tmp/cc6LReuX.o: In function `main':
gd2.c:(.text+0x19): undefined reference to `gdImageCreate'
gd2.c:(.text+0x31): undefined reference to `gdImageCreate'
gd2.c:(.text+0x59): undefined reference to `gdImageColorAllocate'
gd2.c:(.text+0x81): undefined reference to `gdImageColorAllocate'

Подожди, что? Хорошо, давайте что-нибудь проверим.

# Let's sure the lib was found.
$ gcc -lgd_something gd.c
/usr/bin/ld: cannot find -lgd_something

# Lets sure we made no mistake with the symbol's name
$ nm /usr/lib/libgd.a
...
00000dc0 T gdImageColorAllocate
...
000003b0 T gdImageCreate

# So, everything should be ok
$ gcc -lgd gd.c
/tmp/cc6LReuX.o: In function `main':
gd2.c:(.text+0x19): undefined reference to `gdImageCreate'
gd2.c:(.text+0x31): undefined reference to `gdImageCreate'
gd2.c:(.text+0x59): undefined reference to `gdImageColorAllocate'
gd2.c:(.text+0x81): undefined reference to `gdImageColorAllocate'

$ echo $LD_LIBRARY_PATH
# Nothing

И я не знаю, что мне делать. Это ошибка в gcc или я что-то не так делаю. На моем предыдущем OS (Ubuntu 10.04) все работает хорошо. Какой файл мне показать?

1 Ответ

5 голосов
/ 07 декабря 2011

Изменить:

$ gcc -lgd gd.c

на:

$ gcc gd.c -lgd 

(Причина: порядок ссылок имеет значение !)

О, и добавить -Wall пока ты на нем - мне больно каждый раз, когда я вижу людей, компилирующих с отключенными предупреждениями.

$ gcc -Wall gd.c -lgd 
...