关于非常简单的程序的未定义参考

lan*_*nus 5 linker gcc linker-errors undefined-reference

一旦我安装了Ubuntu 11.10,就会出现奇怪的错误.我想用我的C程序使用GD,所以我安装了包"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'
Run Code Online (Sandbox Code Playgroud)

等等,什么?好的,我们来检查一下.

# 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
Run Code Online (Sandbox Code Playgroud)

我不知道该怎么办.这是gcc中的错误还是我做错了什么.在我以前的操作系统(Ubuntu 10.04)上,一切运行良好.我应该为您展示哪个文件?

Pau*_*l R 5

更改:

$ gcc -lgd gd.c
Run Code Online (Sandbox Code Playgroud)

至:

$ gcc gd.c -lgd 
Run Code Online (Sandbox Code Playgroud)

(原因:链接顺序很重要!)

哦,-Wall当你在它的时候添加它 - 每当我看到人们编译警告被禁用时,它就会非常痛苦.

$ gcc -Wall gd.c -lgd 
Run Code Online (Sandbox Code Playgroud)