2011-12-07 32 views
5

Khi tôi đã cài đặt Ubuntu 11.10, xuất hiện lỗi lạ. Tôi muốn sử dụng GD với chương trình C của mình, vì vậy tôi đã cài đặt gói "libgd2-xpm-dev". Mọi thứ đã được cài đặt - các tệp gd.h và libgd.a nằm trong "/ usr/include" và trong "/ usr/lib". Vì vậy, tôi đã cố gắng để biên dịch chương trình đơn giản với GD.Tham chiếu không xác định trên chương trình rất đơn giản

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

Chờ đợi, cái gì? Được rồi, hãy kiểm tra một cái gì đó.

# 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 

Và tôi không biết mình phải làm gì. Nó là một lỗi trong gcc hoặc tôi làm điều gì đó sai trái. Trên os trước đây của tôi (Ubuntu 10.04) tất cả mọi thứ hoạt động tốt. Tôi nên hiển thị tệp nào cho bạn?

+0

bản sao có thể có của [trình liên kết cho tôi biết nó không thể giải quyết các biểu tượng, nhưng chúng ở đó?] (Http://stackoverflow.com/questions/8382153/linker-tells-me-it-cant- giải quyết-biểu tượng-nhưng-họ-đó) –

Trả lời

5

Thay đổi:

$ gcc -lgd gd.c 

tới:

$ gcc gd.c -lgd 

:

Oh, và thêm -Wall trong khi bạn đang ở đó - nó đau khổ cho tôi rất nhiều mỗi khi (Reason link order matters!) Tôi thấy mọi người biên dịch với cảnh báo bị vô hiệu hóa.

$ gcc -Wall gd.c -lgd 
+0

Whoa, nó hoạt động! Tính năng không rõ ràng của gcc. Cảm ơn rất nhiều. P.S. Tôi luôn luôn sử dụng -Wall, đừng lo lắng :) – lanus

+0

Cảm ơn - điều đó giúp giảm đau. ;-) –

Các vấn đề liên quan