我正在使用静态库创建一个简单的拼写检查程序,因为我希望其他人能够使用拼写检查功能。这两个问题区域在库源代码和库头中。当我编译库时,这是我得到的错误:
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。
我想知道的是导致上述错误的原因,因为我无法弄明白。
答案 0 :(得分:3)
问题似乎是连接checker.cpp两次 - 你可以添加你的makefile(还要确保在checker.cpp中没有定义check_spelling两次并在构建之前尝试清理中间文件)?
答案 1 :(得分:3)
您好像已将checker.cpp
添加到存档两次。
请尝试使用此命令:
ar -cvr libspellcheck.a checker.o
使用r
代替q
将替换任何具有相同名称的现有文件,而不是添加其他副本。
或者,只需确保在向其添加任何文件之前删除存档,因此它始终为空。