/ / VS2012で静的CUDAランタイムをリンクする方法-visual-studio、visual-studio-2012、cuda、リンカー

VS2012でスタティックCUDAランタイムをリンクするには? - ビジュアルスタジオ、ビジュアルスタジオ2012、cuda、リンカ

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」と一致しません

  1. Visual Studio 2012で静的CUDAランタイムをリンクする方法は?
  2. デバッグ構成で同じリンクする方法は?

回答:

回答№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」を追加

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