2011-08-28 56 views
1

我一直在研究C++中的跨平臺庫。我一直在Windows(MinGW/msys)和Ubuntu(g ++)編譯,它編譯沒有任何錯誤。「多重定義」的錯誤報告

我剛拿到Kubuntu的電腦上。當我嘗試編譯它時,出現一些錯誤,說我對某些變量有多個定義。這些變量在頭文件中定義爲extern,並在一行中定義爲一行。

./libAoTK.a(aotk_unix.o):/home/rickard/c++/AoTK/src/aotk_unix.cpp:16: multiple definition of `AoTK::disp' 
./libAoTK.a(aotk_unix.o):/home/rickard/c++/AoTK/src/aotk_unix.cpp:12: first defined here 

aotk_unix.cpp該碼具有disp只有一個定義,並在線路12和16有至disp沒有引用。

我不明白爲什麼它無法鏈接,而完全相同的代碼在另一個* nix機器上編譯得很好。

+0

什麼版本的GCC,成功和失敗,從而沒有覆蓋在歸檔中存在的文件,? –

+2

您確定該鏈接與/home/richard/...../aotk_unix.cpp文件相同嗎? –

+2

我剛剛檢出了github存儲庫,並能夠成功地構建測試。嘗試'make clean'並重建。 – bdonlan

回答

1

我在bdonlans的評論幫助下計算出來的。在創建lib-archive時,問題出現在我的makefile中。我用命令

ar -cvq 

更改爲

ar -cr 

它鏈接時,沒有任何錯誤