Я составитель openexr2.0.0 с помощью Visual Studio 2012 x64 DLL, я получил эту ошибку:Visual Studio 2012 не может разрешить статические поля в длле Lib
ImfLut.obj : error LNK2001: unresolved external symbol "private: static union half::uif const * const half::_toFloat" ([email protected]@@[email protected]@B)
ImfRgbaYca.obj : error LNK2001: unresolved external symbol "private: static unsigned short const * const half::_eLut" ([email protected]@@0QBGB)
И я посмотрел на половине. Lib с использованием Dumpbin/экспорта:
Другой взгляд с использованием Dumpbin/экспорта на half.dll:
два символа есть. И интересно, когда я удаляю half.lib из зависимости, VS complain convert также не решен. Это показывает, что он может найти конвертировать, но не _toFloat и _eLut. Различия заключаются в следующем: _toFloat и _eLut оба являются статическими полями, а преобразование - статическим.
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];
...
};
Моя система - это окна 8 x64. Кто-нибудь знает, как решить эту проблему?
Казалось бы, метод 'convert' реализован в файле .cpp, скомпилированном в half.dll, а переменные' _toFloat' и '_eLut' - нет. –
Я обновил вопрос, используя dumpbin на half.dll. Символы есть. И я собираю ilmimf.dll. Я не думаю, что для компиляции библиотеки требуется half.dll. –
@ Это то же самое, с чем я столкнулся сейчас. Я пытался скомпилировать alembic 1.5.8, как вы его решили в конце? – Shuman