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.lib

half.dll で dumpbin /exports を使用して別の検索を行います。 半分.dll

2つのシンボルがそこにあります。そして興味深いことに、half.lib を依存関係から削除すると、VS クレームの変換も未解決です。これは、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)これは、プロジェクト ファイルでこれらのシンボルを確実に -ingする必要があることを意味します。具体的には半分に -#define追加できるものがあります:これは、 halfExport.hOPENEXR_DLLで外観がチェックされており、それを行います。

于 2015-12-24T19:58:08.140 に答える