2

我正在使用静态库创建一个简单的拼写检查程序,因为我希望其他人能够使用拼写检查功能。两个问题区域在库源代码和库头中。当我编译库时,这是我得到的错误:

 ar -cvq libspellcheck.a checker.o
    a - checker.o
    g++ -o spell-check main.o meta.o libspellcheck.a
    libspellcheck.a(checker.o): In function `check_spelling(char*, char*)':
    checker.cpp:(.text+0x0): multiple definition of `check_spelling(char*, char*)'
    libspellcheck.a(checker.o):checker.cpp:(.text+0x0): first defined here
    collect2: ld returned 1 exit status
    make: *** [spellcheck] Error 1

checker.cpp 代码位于此处。头文件 (spellcheck.h) 位于此处

我想知道是什么导致了上述错误,因为我无法弄清楚。

4

2 回答 2

3

问题似乎是链接 checker.cpp 两次 - 你可以添加你的 makefile(还要确保 check_spelling 没有在 checker.cpp 中定义两次,并在构建之前尝试清理中间文件)?

于 2013-01-06T17:32:58.313 回答
3

看起来好像您已将checker.cpp两次添加到存档中。

尝试改用此命令:

ar -cvr libspellcheck.a checker.o

使用r代替q将替换任何具有相同名称的现有文件,而不是添加它的另一个副本。

或者,只需确保在向其中添加任何文件之前删除存档,因此它始终为空。

于 2013-01-06T18:25:06.393 回答