链接器错误;找不到结构中的静态变量
Linker error; static variable in struct not found
我正在处理(其他人的)代码,其中动态库是从多个文件创建的。
文件 "MyStaticVector.h" 包含具有固定(模板化)长度的静态向量的 definition/implementation。
编译成库(Windows下的.dll,Linux下的.so)。 Compiling/linking运行成功。
MyStaticVector.h:
----------------
template< unsigned VectorLength >
struct MyStaticVector
{
static const unsigned uNumberOfElements = VectorLength;
MyStaticVector()
{
}
}
我的问题是,这在 MSVC11/debug+release 和 GCC/release 下有效。但是使用 GCC/debug,我在运行时 收到错误,找不到 "uNumberOfElements" 的符号。你能解释一下吗,为什么?
模板参数必须在编译时建立 - 在这种情况下,是 DLL 的编译时。这是因为模板的每个实例都是不同的 class。此时它将为它需要的每个值创建符号 'uNumberOfElements'。
现在,如果您尝试使用编译时不存在的 class(或模板实例),那么它会尝试使用它不存在的 class' t made,符号将不存在。
我正在处理(其他人的)代码,其中动态库是从多个文件创建的。 文件 "MyStaticVector.h" 包含具有固定(模板化)长度的静态向量的 definition/implementation。
编译成库(Windows下的.dll,Linux下的.so)。 Compiling/linking运行成功。
MyStaticVector.h:
----------------
template< unsigned VectorLength >
struct MyStaticVector
{
static const unsigned uNumberOfElements = VectorLength;
MyStaticVector()
{
}
}
我的问题是,这在 MSVC11/debug+release 和 GCC/release 下有效。但是使用 GCC/debug,我在运行时 收到错误,找不到 "uNumberOfElements" 的符号。你能解释一下吗,为什么?
模板参数必须在编译时建立 - 在这种情况下,是 DLL 的编译时。这是因为模板的每个实例都是不同的 class。此时它将为它需要的每个值创建符号 'uNumberOfElements'。
现在,如果您尝试使用编译时不存在的 class(或模板实例),那么它会尝试使用它不存在的 class' t made,符号将不存在。