2011-12-07 14 views
5

Po zainstalowaniu Ubuntu 11.10 pojawia się dziwny błąd. Chcę używać GD z moim programem C, więc zainstalowałem pakiet "libgd2-xpm-dev". Wszystko zostało zainstalowane - pliki gd.h i libgd.a znajdują się w "/ usr/include" oraz w "/ usr/lib". Tak, próbowałem skompilować prosty program z GD.Niezdefiniowane odniesienie do bardzo prostego programu

#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' 

Czekaj, co? Okay, sprawdźmy coś.

# 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 

I nie wiem, co powinienem zrobić. Czy jest to błąd w gcc, czy robię coś nie tak. W moim poprzednim systemie operacyjnym (Ubuntu 10.04) wszystko działa dobrze. Który plik powinienem dla ciebie pokazać?

+0

możliwe duplikat [Linker mi mówi, że nie może rozwiązać symbole, ale są tam?] (Http://stackoverflow.com/questions/8382153/linker-tells-me-it-cant- resolve-symbols-but-theyre-there) –

Odpowiedz

5

Zmiana:

$ gcc -lgd gd.c 

do:

$ gcc gd.c -lgd 

:

Aha, i dodać -Wall podczas gdy jesteś na to - bardzo mnie to boli za każdym razem (Przyczyna link order matters!) Widzę, że ludzie kompilujący się z wyłączonymi ostrzeżeniami.

$ gcc -Wall gd.c -lgd 
+0

Whoa, to działa! Nieoczywista funkcja gcc. Wielkie dzięki. P.S. Zawsze używam -Wall, nie martw się :) – lanus

+0

Dzięki - to pomaga złagodzić ból. ;-) –