1

我一直在研究 C++ 中的跨平台库。我一直在 Windows (MinGW/msys) 和 Ubuntu (g++) 中编译,它编译时没有任何错误。

我刚刚拿到了一台装有 Kubuntu 的电脑。当我尝试在那里编译它时,我收到一些错误,说我对某些变量有多个定义。这些变量extern在头文件中定义,并在一行的一个 cpp 中定义。

./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 机器上编译得很好。

4

1 回答 1

1

我在 bdonlans 评论的帮助下想通了。创建 lib-archive 时,问题出在我的 makefile 中。我使用了命令

ar -cvq 

当更改为时,它没有覆盖存档中的现有文件

ar -cr

它链接没有任何错误

于 2011-08-28T16:00:23.963 回答