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:
Еще один поиск с использованием dumpbin / exports на 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++-> Препроцессор".