1

次の問題を解決しようとしています: C++Amp を使用するライブラリを持っています。ライブラリは警告なしでコンパイルされ、単体テストはすべてが機能していることを示しています。このライブラリの GUI である QT ベースのプロジェクトがあり、ここで問題が始まります。GUI をコンパイルするたびに、リンク段階で次のエラーが発生します。

widgets.obj : エラー LNK2019: 未解決の外部シンボル "__declspec(dllimport) プライベート: unsigned short const * __cdecl Concurrency::accelerator::_Get_device_path(void)const" (_ imp ?_Get_device_path@accelerator@Concurrency@@AEBAPEBGXZ) が関数で参照されています"void __cdecl `public: static class std::_Future_error_category std::_Future_error_object::_Future_object''(void) の動的イニシャライザ" (??__E?_Future_object@?$_Future_error_object@H@std@@2V_Future_error_category@2@A @@YAXXZ)

ライブラリは、dll ではなく、lib ファイルにリンクされています。

プロジェクト内の他のオブジェクト ファイルについても同じことが言えます。C++Amp を使用しているときに、リンク段階で同様の問題が発生した人はいますか。解決するのは非常に簡単な問題だと確信していますが、現時点ではどうすれば解決できるのかわかりません。前もって感謝します。

更新: MSVC++ の QT プロジェクトに含めようとすると、同じことが起こります。

4

1 に答える 1

2
  __imp_?_Get_device_path@accelerator@Concurrency@@AEBAPEBGXZ

その文字列に対して undname.exe ユーティリティを実行して名前を解読すると、次のようになります。

  declspec(dllimport) private: 
  unsigned short const * __ptr64 
  __cdecl Concurrency::accelerator::_Get_device_path(void)const __ptr64

つまり、64 ビット コードです。vc/lib/amd64/vcamp.lib で最も近い一致を探すと、次のことがわかります。

 ?_Get_device_path@accelerator@Concurrency@@AEBAPEB_WXZ

undname.exe を使用してデマングルするもの:

 private: 
 wchar_t const * __ptr64 
 __cdecl Concurrency::accelerator::_Get_device_path(void)const __ptr64

不一致に注意してください。関数は を返すようにコンパイルされunsigned short*、ライブラリ関数は を返しますwchar_t*。コンパイラの設定が間違っています。プロジェクト + プロパティ、C/C++、言語、WChar_t をビルトイン タイプとして扱うは、デフォルトの「はい」に設定する必要があります。

于 2014-01-30T23:00:03.153 に答える