【问题标题】:Linker error; static variable in struct not found链接器错误;未找到结构中的静态变量
【发布时间】:2016-09-29 12:48:18
【问题描述】:

我正在处理(其他人的)代码,其中动态库是从多个文件创建的。 文件“MyStaticVector.h”包含具有固定(模板化)长度的静态向量的定义/实现。

这被编译成一个库(Windows 下为 .dll,Linux 下为 .so)。编译/链接运行成功。

MyStaticVector.h:
----------------

template< unsigned VectorLength >
struct MyStaticVector
{
    static const unsigned uNumberOfElements = VectorLength;

    MyStaticVector()
    {
    }
}

我的问题是,这在 MSVC11/debug+release 和 GCC/release 下有效。但是使用 GCC/debug,我得到一个错误在运行时,找不到“uNumberOfElements”的符号。你能解释一下,为什么?

【问题讨论】:

  • 哪个版本的 gcc?什么编译器标志?

标签: c++ gcc dll linker undefined-symbol


【解决方案1】:

模板参数必须在编译时建立 - 在这种情况下,是 DLL 的编译时。这是因为模板的每个实例都是不同的类。正是在这一点上,它将为它需要的每个值创建符号“uNumberOfElements”。

现在,如果您尝试使用在编译期间不存在的类(或模板实例),那么它将尝试使用它尚未创建的类,并且符号将不存在.

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2012-03-06
    • 1970-01-01
    • 1970-01-01
    • 2023-03-29
    相关资源
    最近更新 更多