繁体   English   中英

从gcc 3.3.3移植到4.1.0,C ++模板,未定义引用

[英]Port from gcc 3.3.3 to 4.1.0, C++ templates, undefined reference to

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

    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>'

将可执行文件链接到共享库时,就全部完成了。

这是一条令人费解的消息,但这意味着您没有定义虚函数,请参见此处

我遇到了类似的问题,并通过在头文件(而不是cpp文件)中实现功能来解决了该问题。

莎露2。

如果不了解您的源代码,这很难回答。 但是,在gcc邮件列表上询问此特定问题可能会产生更好的结果,因为从事gcc的人员比其他所有人都更了解所有复杂性。

感谢您的评论。 我从编译/链接选项中删除了-frepo和-fno-impicit-templates,很高兴。

暂无
暂无

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM