提问人:grae22 提问时间:12/14/2016 更新时间:12/14/2016 访问量:70
导出类的静态常量的未解决的外部符号链接错误(仅限某些项目)
Unresolved external symbol link error for exported class' static constants (some projects only)
问:
我在项目 Utils 中有一个类,如下所示:
数学.h
class __declspec(dllexport) Maths
{
public:
static const double c_epsilon;
...
}
数学.cpp
const double Maths::c_epsilon = DBL_EPSILON;
然后,我有(许多)其他项目使用此类(并使用 c_epsilon 常量)。
几乎所有其他项目都可以毫无问题地构建和链接......但是有几个失败了,并出现错误:
LNK2001未解析的外部符号“__declspec(dllimport) public: static double const Maths::c_epsilon”(__imp_?c_epsilon@Maths@@2NB)
这两个失败的项目都是 Google 测试项目,除了生成可执行文件(而不是 DLL)之外,设置似乎与所有其他项目相同。
失败的项目肯定会指定 Utils.lib 文件。
我只能想象这是一个项目设置问题(因为其他项目很好),但我找不到任何不同的设置来解决问题。
答:
1赞
grae22
12/14/2016
#1
事实证明,有问题的项目将输出文件夹 $(OutDir) 指定为查找其他依赖项的路径。这是有问题的,因为在构建的这一点上,输出文件夹仍然包含“旧”的 lib 文件,这些文件被复制为构建后步骤(一个可能应该审查的过程)。
“旧”lib 文件来自一个构建,其中常量实际上并没有声明为“const”(只是静态)——这已被更改,因此产生了未解决的外部符号错误。
评论