导出的 class' 静态常量的未解析外部符号 link 错误(仅限某些项目)

Unresolved external symbol link error for exported class' static constants (some projects only)

我在项目Utils中有一个class如下:

Maths.h

class __declspec(dllexport) Maths
{
public:
  static const double c_epsilon;

  ...
}

Maths.cpp

const double Maths::c_epsilon = DBL_EPSILON;

然后我有(许多)其他项目使用此 class(并使用 c_epsilon 常量)。

几乎所有其他项目都可以构建并且 link 没有问题...但是有几个项目失败并出现错误:

LNK2001 unresolved external symbol "__declspec(dllimport) public: static double const Maths::c_epsilon" (__imp_?c_epsilon@Maths@@2NB)

这两个失败的项目都是 Google 测试项目,除了生成可执行文件(而不是 DLL)之外,似乎与所有其他项目的设置相同。

失败的项目肯定会指定 Utils.lib 文件。

我只能想象这是一个项目设置问题(因为其他项目没问题),但我找不到任何不同的设置来解决这个问题。

原来有问题的项目指定了输出文件夹 $(OutDir) 作为查找其他依赖项的路径。这是有问题的,因为在构建的这一点上,输出文件夹仍然包含 'old' lib 文件,这些文件被复制为 post-构建步骤(可能应该审查的过程)。

'old' lib 文件来自一个构建,其中常量实际上并未声明为 'const'(仅仅是静态的)- 这已被更改,因此导致未解析的外部符号错误。