链接器错误;未找到struct中的静态变量

时间:2016-09-29 12:48:19

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

我正在处理(别人的)代码,其中从多个文件创建动态库。 文件“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”的符号。你能解释一下,为什么?

1 个答案:

答案 0 :(得分:1)

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

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