2

我正在使用 Visual Studio 2012 x64 dll 编译 openexr2.0.0,我得到了这个错误:

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)

我使用 dumpbin /exports 在 half.lib 中查找: 半库

在 half.dll 上使用 dumpbin /exports 进行另一个查找: 半个.dll

这两个符号在那里。有趣的是,当我从依赖项中删除 half.lib 时,VS 抱怨 convert 也没有解决。这表明它可以找到convert 而不是_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 x64。有谁知道如何解决这个问题?

4

2 回答 2

3

您正在尝试链接__declspec(dllexport)-ed 符号。这意味着您需要确保__declspec(dllimport)在项目文件中使用了这些符号。特别是对于half -#define您可以添加一个:OPENEXR_DLL正在检查halfExport.h中的外观,并将为您执行此操作。

于 2015-12-24T19:58:08.140 回答
0

以下链接中的第 14 步为我解决了这个问题:

https://groups.google.com/forum/#!topic/openvdb-forum/-jFJQ2N4BGc

在您的项目中,将 OPENEXR_DLL 添加到“项目属性->C/C++->预处理器”中的“预处理器定义”

于 2016-08-25T11:09:34.527 回答