C ++静态库链接器错误

时间:2013-01-06 17:28:15

标签: c++ g++ static-libraries linker-errors

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

 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代码位于here。 头文件(spellcheck.h)位于here

我想知道的是导致上述错误的原因,因为我无法弄明白。

2 个答案:

答案 0 :(得分:3)

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

答案 1 :(得分:3)

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

请尝试使用此命令:

ar -cvr libspellcheck.a checker.o

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

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