错误编译在C中使用WordNet库的程序

时间:2012-05-04 18:03:13

标签: c wordnet

我已经成功安装了WordNet库。现在我正在尝试在程序中使用该库,但我无法获得要构建的示例程序。即使库搜索路径正确,我也会收到链接器错误(未定义的引用)。

这是错误:

gcc -g -I/usr/local/WordNet-3.0/include  -o wordnet_sample.o -c wordnet_sample.c
gcc -L/usr/local/WordNet-3.0/lib -lWN -o wordnet_sample wordnet_sample.o
wordnet_sample.o: In function `main':
/home/user/wordnet_sample/wordnet_sample.c:6: undefined reference to `wninit'

这是Makefile

WORDNET_INSTALL=/usr/local/WordNet-3.0
CFLAGS=-g -I$(WORDNET_INSTALL)/include
LDFLAGS=-L$(WORDNET_INSTALL)/lib -lWN

wordnet_sample: wordnet_sample.o
        gcc $(LDFLAGS) -o wordnet_sample wordnet_sample.o

wordnet_sample.o: wordnet_sample.c
        gcc $(CFLAGS) -o wordnet_sample.o -c wordnet_sample.c

这是示例程序

#include <wn.h>
#include <stdlib.h>
int main(int argc, char **argv) {
    int isOpen = 0 == wninit();
    if (isOpen) {
            printf("wordnet opened!\n");
    }
    else {
            printf("Could not open WordNet dictionary!\n");
    }
    return 0;
}

已安装WordNet库

[user@local wordnet_sample]$ ls -l /usr/local/WordNet-3.0/lib/
total 180
-rw-r--r-- 1 root root 172344 May  3 15:34 libWN.a
drwxr-xr-x 2 root root   4096 May  3 15:34 wnres

我怀疑我可能需要更多的链接器参数,但我真的不确定。有人碰到过这个吗?有没有人知道为什么未定义的引用错误正在发生,即使我有正确的库和库搜索路径?

1 个答案:

答案 0 :(得分:1)

您需要将-c添加到CFLAGS

同样,第一个gcc命令需要在对象之后拥有库。您可以将LDFLAGS放在最后:

gcc -o wordnet_sample wordnet_sample.o $(LDFLAGS)

更好的是,有单独的LDFLAGS(链接器选项)和LIBS(要链接的实际库)。所以:

LDFLAGS=-L$(WORDNET_INSTALL)/lib
LIBS=-lWN
....
gcc $(LDFLAGS) -o wordnet_sample wordnet_sample.o $(LIBS)