Visual Studio 2012 не может разрешить статические поля в библиотеке DLL

Я компилирую openexr2.0.0 с использованием Visual Studio 2012 x64 DLL, я получил эту ошибку:

ImfLut.obj : error LNK2001: unresolved external symbol "private: static union half::uif const * const half::_toFloat" (?_toFloat@half@@0QBTuif@1@B)

ImfRgbaYca.obj : error LNK2001: unresolved external symbol "private: static unsigned short const * const half::_eLut" (?_eLut@half@@0QBGB)

И я посмотрел в файле half.lib, используя dumpbin / exports: half.lib

Еще один поиск с использованием dumpbin / exports на half.dll:half.dll

Два символа там. И что интересно, когда я удаляю half.lib из зависимости, VS жаловаться на преобразование также не разрешается. Это показывает, что он может найти конвертирование, но не _toFloat и _eLut. Различия: _toFloat и _eLut являются статическими полями, convert является статическим методом.

    class half
    {
        ...
      public:

        union uif
        {
        unsigned int    i;
        float       f;
        };

      private:

        HALF_EXPORT static short                  convert (int i);

        HALF_EXPORT static const uif              _toFloat[1 << 16];
        HALF_EXPORT static const unsigned short   _eLut[1 << 9];
        ...
    };

Моя система Windows 8 х64. Кто-нибудь знает, как решить эту проблему?

2 ответа

Вы пытаетесь связать против __declspec(dllexport) символы. Это означает, что вам нужно убедиться, что вы __declspec(dllimport) -в этих символах в вашем файле проекта. Конкретно до половины - есть #define можете добавить: OPENEXR_DLL это проверяется на наличие в halfExport.h и сделает это за вас.

Шаг 14 по следующей ссылке решил проблему для меня:

https://groups.google.com/forum/

В своем проекте добавьте OPENEXR_DLL в "Определения препроцессора" в "Свойствах проекта->C/C++-> Препроцессор".

Другие вопросы по тегам