2016-12-14 1 views
0

У меня есть класс в проекте Utils следующим образом:Нерешенные внешняя ошибка символ ссылка для статических констант экспортируемого класса (только некоторые проекты)

Maths.h

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

    ... 
} 

Maths.cpp

const double Maths::c_epsilon = DBL_EPSILON; 

Я тогда (много) и других проектов, которые используют этот класс (и использовать c_epsilon гр onstant).

Почти все проекты строительства и связь без проблем ... но пара завершаться с ошибкой:

LNK2001 unresolved external symbol "__declspec(dllimport) public: static double const Maths::c_epsilon" ([email protected]@@2NB)

В двух провальных проектах являются проектами Испытательного Google и другие, чем производить исполняемый файл (вместо DLL), похоже, настроены так же, как и все другие проекты.

Неудачные проекты определенно определяют файл Utils.lib.

Я могу только представить себе, что это проблема с настройкой проекта (так как другие проекты прекрасны), но я не могу найти какие-либо настройки, которые бы отличались, чтобы решить проблему.

+0

Вы определяете зависимость между двоичными файлами в решении? –

+0

@ КириллКобелев. Да, я. – grae22

+0

После этого AFAIK вам не нужно указывать файл .lib. Файлы Lib должны использоваться для библиотек DLL, которые не являются частью решения. –

ответ

1

Оказывает проблемные проекты, указывающие выходную папку $ (OutDir) как путь к поиску дополнительных зависимостей. Это проблематично, так как на данный момент в сборке выходная папка по-прежнему содержит «старые» файлы lib, которые копируются как шаг после сборки (процесс, который, вероятно, следует пересмотреть).

«старые» файлы lib были из сборки, где константы фактически не были объявлены как «const» (просто статические) - это было изменено, следовательно, возникла неразрешенная ошибка внешнего символа.

Смежные вопросы