2013-01-06 55 views
2

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

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

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

回答

3

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

尝试使用这个命令:

ar -cvr libspellcheck.a checker.o 

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

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

+0

谢谢。你的解决方案完美运作 – Igor

3

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

+0

不,你可以从错误中清楚地看到两个版本都在档案中。在一个翻译单元中定义一个函数两次将是一个编译器错误。 –