2013-05-03 1 views
2

Я составитель 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/экспорта: half.lib

Другой взгляд с использованием Dumpbin/экспорта на half.dll: 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. Кто-нибудь знает, как решить эту проблему?

+0

Казалось бы, метод 'convert' реализован в файле .cpp, скомпилированном в half.dll, а переменные' _toFloat' и '_eLut' - нет. –

+0

Я обновил вопрос, используя dumpbin на half.dll. Символы есть. И я собираю ilmimf.dll. Я не думаю, что для компиляции библиотеки требуется half.dll. –

+1

@ Это то же самое, с чем я столкнулся сейчас. Я пытался скомпилировать alembic 1.5.8, как вы его решили в конце? – Shuman

ответ

2

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

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