3

CUDA 5.5 に含まれる静的 CUDA ランタイムを使用しようとしていますが、いくつかの問題に直面しています。

cudart_static.lib以下は、さまざまな IDEでリンクした結果です。

ビジュアル スタジオ 2012:

リンカーは次のエラーで失敗します。

エラー LNK2038: '_MSC_VER' の不一致が検出されました: 値 '1600' は、kernel.cu.obj の値 '1700' と一致しません

静的 CUDA ランタイムは VS2010 を使用してコンパイルされているようです。

ビジュアル スタジオ 2010:

エラーなし。正常にリンクします。

ビジュアル スタジオ 2008:

次の一連の警告と正常にリンクします。

cudart_static.lib(cuda_*.obj): 警告 LNK4229: 無効なディレクティブ '/FAILIFMISMATCH:_MSC_VER=1600' が検出されました。無視された

また、すべての IDE で、DEBUG 構成で実行すると、リンクが次のエラーで失敗します。

エラー LNK2038: '_ITERATOR_DEBUG_LEVEL' の不一致が検出されました: 値 '0' は、kernel.cu.obj の値 '2' と一致しません

質問:

  1. Visual Studio 2012 で静的 CUDA ランタイムをリンクする方法は?
  2. DEBUG構成で同じものをリンクする方法は?
4

1 に答える 1

3

最初の質問について:

1.Visual Studio 2012 で静的 CUDA ランタイムをリンクするにはどうすればよいですか?

リリースノートから:

「Windows の CUDA 5.5 Release Candidate (RC) に同梱されている cudart ライブラリの新しい静的バージョンは、Microsoft Visual Studio 2008 (VC9.0) や Microsoft Visual Studio 2012 (VC 11.0) では動作しません。CUDA 5.5 以降では、 nvcc コンパイラは、デフォルトで静的バージョンの cudart ライブラリに対してリンクします。そのため、CUDA 5.5 RC が Microsoft Visual Studio 2008 または 2012 で正しく動作するようにするには、nvcc に --cudart=shared オプションを使用してリンクを強制してください。 cudart ライブラリの共有バージョンです。アプリケーションが cudart ライブラリに自動的にリンクする nvcc 機能に依存しておらず、代わりに cudart.lib に対して明示的にリンクしている場合、そのアプリケーションは引き続き正しくリンクします。」

したがって、VS2012 および/または VS2008 の Windows での静的ライブラリの使用は、現時点ではサポートされていません。

2番目の質問について:

2.DEBUG構成で同じものをリンクする方法は?

デバッグ モードの問題は、cudart スタティック ライブラリのビルド方法に関係しています。通常は、デバッグ モード用とリリース モード用の 2 つの静的ライブラリを含めます。回避策として、次のようなことを試すことができます (VS 2010 の場合):

プロジェクト ページ...構成プロパティ...C、C++...プリプロセッサ...プリプロセッサ定義

「_ITERATOR_DEBUG_LEVEL=0」を追加

あなたのマイレージは異なる場合があります。

于 2013-06-10T02:02:06.860 に答える