端口从gcc 3.3.3到4.1.0,C ++模板,未定义引用

时间:2009-06-01 13:02:35

标签: c++ templates gcc

我们的应用程序在许多地方使用C ++模板。我目前正在尝试从gcc 3.3.3移植到4.1.0并遇到问题。我在一个小的共享库和可执行文件中重新创建了该问题。我正在构建共享库Ok,但可执行文件无法链接以下内容:

    undefined reference to `MyNumber<int>::~MyNumber()'
    undefined reference to `MyNumber<int>::MyNumber(int)'
    undefined reference to `MyNumber<int>::number()'

我没有直接在可执行文件中使用模板类,并且希望将这一切都封装在共享库中的实现中(可能是天真的)。

使用共享库时,只会出现此问题。当我在SLES 11(gcc 4.3.2)上构建应用程序时,我的大多数问题似乎都得到了解决,但我仍然收到以下一些:

    undefined reference to `vtable for MYCLASS<T1, T2>'

将可执行文件链接到共享库时,这就是全部。

4 个答案:

答案 0 :(得分:5)

这是一个令人痛苦的模糊信息,但这意味着您没有定义虚拟功能,请参阅here

答案 1 :(得分:2)

我遇到了类似的问题,并通过在头文件中实现函数来解决它,而不是在cpp文件中。

Salu2。

答案 2 :(得分:0)

在不了解您的源代码的情况下,这很难回答。然而,在gcc mailing list上询问这个特定问题可能会产生更好的结果,因为在gcc上工作的人比其他人更了解所有错综复杂的知识。

答案 3 :(得分:0)

感谢您的评论。我从编译/链接选项中删除了-repo和-fno-implicit-templates,并且很好。