我正在处理(别人的)代码,其中从多个文件创建动态库。 文件“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”的符号。你能解释一下,为什么?
答案 0 :(得分:1)
模板参数必须在编译时建立 - 在这种情况下,DLL的编译时间。这是因为模板的每个实例都是不同的类。在这一点上,它将为它所需的每个值创建符号'uNumberOfElements'。
现在,如果您尝试使用在编译期间不存在的类(或模板实例),那么它将尝试使用它尚未创建的类,并且该符号将不存在