1

我正在尝试在 Ubuntu 10.10 上编译这个使用 hunspell 库和 gcc(版本 4.6.3)的纯 C 源代码:

#include <stdlib.h>
#include <stdio.h>
#include <hunspell/hunspell.h>

int main() {
    Hunhandle *spellObj = Hunspell_create("/home/artem/en_US.aff", "/home/artem/en_US.dic");

    char str[60];
    scanf("%s", str);
    int result = Hunspell_spell(spellObj, str);

    if(result == 0)
        printf("Spelling error!\n");
    else
        printf("Correct Spelling!");

    Hunspell_destroy(spellObj);
    return 0;
}

使用命令:

gcc -lhunspell-1.3 example.c

但我有一些链接器问题:

/tmp/cce0QZnA.o: In function `main':
example.c:(.text+0x22): undefined reference to `Hunspell_create'
example.c:(.text+0x52): undefined reference to `Hunspell_spell'
example.c:(.text+0x85): undefined reference to `Hunspell_destroy'
collect2: ld returned 1 exit status

此外,我检查了/usr/include/hunspell/文件夹,文件 hunspell.h 存在并包含来自我的源的所有函数。
我做错了什么,为什么我不能编译这个源?

4

1 回答 1

3

尝试:

$ gcc example.c -lhunspell-1.3

请参阅该选项的文档-l

在命令中编写此选项的位置有所不同;链接器按照指定的顺序搜索和处理库和目标文件。因此,'foo.o -lz bar.o'在文件“foo.o”之后但在“bar.o”之前搜索库“z”。如果“bar.o”引用“z”中的函数,则可能不会加载这些函数。

因此,您要求 GCC搜索库,然后编译您的代码。您需要以相反的方式执行此操作,通常在命令行上指定要链接的库。

还要验证库文件的磁盘名称,通常有符号链接会从名称中删除版本号,所以也许你的命令应该是:

$ gcc example.c -lhunspell

链接到系统上可用的“当前”库版本。

于 2013-10-31T11:00:44.333 回答