CUDA 5.5に含まれる静的CUDAランタイムを使用しようとしましたが、いくつかの問題に直面しています。
以下はリンクの結果です cudart_static.lib
さまざまなIDEで:
Visual Studio 2012:
リンカーは次のエラーで失敗します。
エラーLNK2038:「_MSC_VER」の不一致が検出されました:値「1600」 kernel.cu.objの値「1700」と一致しません
VS2010を使用して静的CUDAランタイムがコンパイルされているようです。
Visual Studio 2010:
エラーなし。リンクに成功しました。
Visual Studio 2008:
次の一連の警告で正常にリンクします。
cudart_static.lib(cuda _ *。obj):警告LNK4229:無効なディレクティブ「/ FAILIFMISMATCH:_MSC_VER = 1600」が検出されました。無視された
また、すべてのIDEで、DEBUG構成で実行すると、次のエラーでリンクが失敗します。
エラーLNK2038:「_ITERATOR_DEBUG_LEVEL」の不一致が検出されました:値 「0」はkernel.cu.objの値「2」と一致しません
- Visual Studio 2012で静的CUDAランタイムをリンクする方法は?
- デバッグ構成で同じリンクする方法は?
回答:
回答№1の場合は3最初の質問について:
1. Visual Studio 2012で静的CUDAランタイムをリンクする方法
から リリースノート:
「cudartライブラリの新しい静的バージョンCUDA 5.5リリースに付属 Windowsの候補(RC)は、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ライブラリの共有バージョンに対して強制的にリンクします。アプリケーションがnvccに依存していない場合 cudartライブラリに自動的にリンクする機能。代わりにcudart.libに対して明示的にリンクしている場合、そのアプリケーションも引き続き正しくリンクします。」
したがって、VS2012および/またはVS2008のWindowsでの静的ライブラリの使用は、現時点ではサポートされていません。
あなたの2番目の質問について:
2.DEBUG構成で同じリンクする方法
デバッグモードの問題は、cudart静的ライブラリが構築されました。通常の方法では、デバッグモード用とリリースモード用の2つの静的ライブラリを含めます。回避策として、次のようなものを試すことができます(VS 2010):
プロジェクトページ...構成プロパティ... C、C ++ ...プリプロセッサ...プリプロセッサの定義
「_ITERATOR_DEBUG_LEVEL = 0」を追加
あなたのマイレージは異なる場合があります。