我正在(别人的)代码中,从几个文件创建一个动态库。
文件“ 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 /调试时,在运行时出现错误,找不到“ uNumberOfElements”的符号。你能解释为什么吗?
最佳答案
模板参数必须在编译时建立-在这种情况下,就是DLL的编译时。这是因为模板的每个实例都是不同的类。此时,它将为所需的每个值创建符号“ uNumberOfElements”。
现在,如果您尝试使用在编译时不存在的类(或模板实例),那么它将尝试使用尚未创建的类,并且该符号将不存在。
关于c++ - 链接器错误;找不到struct中的静态变量,我们在Stack Overflow上找到一个类似的问题:https://stackoverflow.com/questions/39770779/