CUDAのNVCCでコマンドプロンプトでコンパイルしたいのですがエラーが出てきます。


環境は  
Windows10 （64bit）  
CUDA 9.1

こちらがソースコードです

[code]

    #include <opencv2/opencv.hpp>
    #include <opencv2/gpu/gpu.hpp>
    #include <ocvlibs.h>
    
    using namespace cv;
    
    //--------------------------------------------------------------------------
    //main
    int main(int argc, char* argv[])
    {
        try
        {
            int wait = 1;
            int numOfGpu = gpu::getCudaEnabledDeviceCount();
    
            if (numOfGpu <= 0)
                throw ("no Gpu available.");
    
            VideoCapture capture;
    
            if (argc == 2)
            {
                capture = VideoCapture(argv[1]);
                wait = 33;
            }
            else
                capture = VideoCapture(0);
    
            const char* wName = "dst";
            Mat src, dst;
            gpu::GpuMat gpuSrc, gpuDst;
            namedWindow(wName, CV_WINDOW_AUTOSIZE);
    
            while (true)
            {
                capture >> src;
                if (src.empty()) break;
    
                gpuSrc.upload(src);
                gpu::cvtColor(gpuSrc, gpuDst, COLOR_RGB2GRAY);
                gpuDst.download(dst);
    
                imshow(wName, dst);
    
                if (waitKey(wait) >= 0) break;
            }
        }
        catch (const char* str)
        {
            std::cout << str << std::endl;
        }
        catch (const cv::Exception* ex)
        {
            std::cout << "Error: " << ex->what() << std::endl;
        }
        return 0;
    }
    
[/code]

ヘッダファイルは特有のものなのでこちらに載せます。

[code]

    //--------------------------------------------------------------------------
    #ifdef _DEBUG                                   //Debugモードの場合
        #pragma comment(lib,"opencv_calib3d246d.lib")
        #pragma comment(lib,"opencv_core246d.lib")
        #pragma comment(lib,"opencv_contrib246d.lib")
        #pragma comment(lib,"opencv_features2d246d.lib")
        #pragma comment(lib,"opencv_flann246d.lib")
        #pragma comment(lib,"opencv_gpu246d.lib")
        #pragma comment(lib,"opencv_haartraining_engined.lib")
        #pragma comment(lib,"opencv_highgui246d.lib")
        #pragma comment(lib,"opencv_imgproc246d.lib")
        #pragma comment(lib,"opencv_legacy246d.lib")
        #pragma comment(lib,"opencv_ml246d.lib")
        #pragma comment(lib,"opencv_objdetect246d.lib")
        #pragma comment(lib,"opencv_ts246d.lib")
        #pragma comment(lib,"opencv_video246d.lib")
    #else                                           //Releaseモードの場合
        #pragma comment(lib,"opencv_calib3d246.lib")
        #pragma comment(lib,"opencv_core246.lib")
        #pragma comment(lib,"opencv_contrib246.lib")
        #pragma comment(lib,"opencv_features2d246.lib")
        #pragma comment(lib,"opencv_flann246.lib")
        #pragma comment(lib,"opencv_gpu246.lib")
        #pragma comment(lib,"opencv_haartraining_engine.lib")
        #pragma comment(lib,"opencv_highgui246.lib")
        #pragma comment(lib,"opencv_imgproc246.lib")
        #pragma comment(lib,"opencv_legacy246.lib")
        #pragma comment(lib,"opencv_ml246.lib")
        #pragma comment(lib,"opencv_objdetect246.lib")
        #pragma comment(lib,"opencv_ts246.lib")
        #pragma comment(lib,"opencv_video246.lib")
    #endif
    
[/code]

こちらがエラーになります。

[code]

    GPUGPU.cu
    C:\Program Files\NVIDIA GPU Computing Toolkit\CUDA\v9.1\bin/../include\cuda_runtime.h: warning C4819: ファイルは、現在のコード ページ (932) で表示できない文字を含んでいます。データの損失を防ぐために、ファイルを Unicode 形式で保存してくださ い。
    C:\Program Files\NVIDIA GPU Computing Toolkit\CUDA\v9.1\bin/../include\w32api.h(186): warning C4005: '_EXTERN_C': マクロが再定義されました。
    C:/Program Files (x86)/Microsoft Visual Studio 14.0/VC/bin/../../VC/INCLUDE\yvals.h(560): note: '_EXTERN_C' の以前の定義を確認してください
    c:\program files\nvidia gpu computing toolkit\cuda\v9.1\include\cuda_runtime_api.h(1950): warning C4819: ファイルは、現 在のコード ページ (932) で表示できない文字を含んでいます。データの損失を防ぐために、ファイルを Unicode 形式で保存してく ださい。
    c:\program files\nvidia gpu computing toolkit\cuda\v9.1\include\cuda_runtime_api.h(1950): warning C4819: ファイルは、現 在のコード ページ (932) で表示できない文字を含んでいます。データの損失を防ぐために、ファイルを Unicode 形式で保存してく ださい。
    c:\program files\nvidia gpu computing toolkit\cuda\v9.1\include\crt\math_functions.h: warning C4819: ファイルは、現在の コード ページ (932) で表示できない文字を含んでいます。データの損失を防ぐために、ファイルを Unicode 形式で保存してくださ い。
    c:\program files\nvidia gpu computing toolkit\cuda\v9.1\include\crt\math_functions.h(838): warning C4819: ファイルは、現在のコード ページ (932) で表示できない文字を含んでいます。データの損失を防ぐために、ファイルを Unicode 形式で保存してく ださい。
    c:\program files\nvidia gpu computing toolkit\cuda\v9.1\include\crt\math_functions.h(1772): warning C4819: ファイルは、 現在のコード ページ (932) で表示できない文字を含んでいます。データの損失を防ぐために、ファイルを Unicode 形式で保存して ください。
    c:\program files\nvidia gpu computing toolkit\cuda\v9.1\include\crt\math_functions.h(2628): warning C4819: ファイルは、 現在のコード ページ (932) で表示できない文字を含んでいます。データの損失を防ぐために、ファイルを Unicode 形式で保存して ください。
    c:\program files\nvidia gpu computing toolkit\cuda\v9.1\include\crt\math_functions.h(3477): warning C4819: ファイルは、 現在のコード ページ (932) で表示できない文字を含んでいます。データの損失を防ぐために、ファイルを Unicode 形式で保存して ください。
    c:\program files\nvidia gpu computing toolkit\cuda\v9.1\include\crt\math_functions.h(4417): warning C4819: ファイルは、 現在のコード ページ (932) で表示できない文字を含んでいます。データの損失を防ぐために、ファイルを Unicode 形式で保存して ください。
    c:\program files\nvidia gpu computing toolkit\cuda\v9.1\include\crt\math_functions.h(5319): warning C4819: ファイルは、 現在のコード ページ (932) で表示できない文字を含んでいます。データの損失を防ぐために、ファイルを Unicode 形式で保存して ください。
    c:\program files\nvidia gpu computing toolkit\cuda\v9.1\include\crt\math_functions.h(6229): warning C4819: ファイルは、 現在のコード ページ (932) で表示できない文字を含んでいます。データの損失を防ぐために、ファイルを Unicode 形式で保存して ください。
    c:\program files\nvidia gpu computing toolkit\cuda\v9.1\include\crt\math_functions.h(7104): warning C4819: ファイルは、 現在のコード ページ (932) で表示できない文字を含んでいます。データの損失を防ぐために、ファイルを Unicode 形式で保存して ください。
    c:\program files\nvidia gpu computing toolkit\cuda\v9.1\include\crt\math_functions.h(7914): warning C4819: ファイルは、 現在のコード ページ (932) で表示できない文字を含んでいます。データの損失を防ぐために、ファイルを Unicode 形式で保存して ください。
    c:\program files\nvidia gpu computing toolkit\cuda\v9.1\include\crt/device_functions.h: warning C4819: ファイルは、現在 のコード ページ (932) で表示できない文字を含んでいます。データの損失を防ぐために、ファイルを Unicode 形式で保存してくだ さい。
    c:\program files\nvidia gpu computing toolkit\cuda\v9.1\include\crt/device_functions.h(776): warning C4819: ファイルは、現在のコード ページ (932) で表示できない文字を含んでいます。データの損失を防ぐために、ファイルを Unicode 形式で保存して ください。
    c:\program files\nvidia gpu computing toolkit\cuda\v9.1\include\crt/device_functions.h(1636): warning C4819: ファイルは 、現在のコード ページ (932) で表示できない文字を含んでいます。データの損失を防ぐために、ファイルを Unicode 形式で保存し てください。
    c:\program files\nvidia gpu computing toolkit\cuda\v9.1\include\crt\device_double_functions.h: warning C4819: ファイルは、現在のコード ページ (932) で表示できない文字を含んでいます。データの損失を防ぐために、ファイルを Unicode 形式で保存し てください。
    c:\program files\nvidia gpu computing toolkit\cuda\v9.1\include\sm_20_intrinsics.h: warning C4819: ファイルは、現在のコ ード ページ (932) で表示できない文字を含んでいます。データの損失を防ぐために、ファイルを Unicode 形式で保存してください 。
    c:\program files\nvidia gpu computing toolkit\cuda\v9.1\include\sm_20_intrinsics.h(925): warning C4819: ファイルは、現在のコード ページ (932) で表示できない文字を含んでいます。データの損失を防ぐために、ファイルを Unicode 形式で保存してくだ さい。
    C:\Program Files\NVIDIA GPU Computing Toolkit\CUDA\v9.1\bin/../include\float.h(57): fatal error C1021: プリプロセッサ コマンド 'include_next' が無効です。
    
[/code]

ヘッダファイルはちゃんと読み込めているはずなのにエラーが出る理由がいまいちわかりません。  
なぜこのようなエラーが出るのでしょうか？  
どうか解決のためにお力を貸していただけないでしょうか？




nvccはCUDAのカーネルコード（GPU用デバイスコード）をコンパイルし、CPU用ホストコードとの連結部分（ディスパッチャー）を自動生成するための特殊なコンパイラーです。nvcc単独では意味をなしません。  
CPU用ホストコードは、nvccが寄生する **ホストコンパイラー**
に渡されてコンパイルされます。Windows環境では通例ホストコンパイラーとしてVisual C++ (cl.exe) が使われます。  
ホスト環境は何を使っていますか？（Visual Studioのバージョンはいくつですか？）  
本来`#include_next`はGCC固有のプリプロセッサなので、おそらくnvccとホストコンパイラーの連携が正しく構成されていないことが原因です。

しかし、そもそもnvccを使いたい理由は何ですか？

見たところ、単にOpenCV
2.4.6のgpuモジュールを使っているだけのようなので、nvccを使う必要はまったくないはずです。普通に`.cpp`としてコンパイルすべきコードのはずです。  
また、基本的にコマンドラインでnvccを使う必要はなく、通例CUDA Toolkitと同時にインストールされる **Visual
Studioインテグレーション** を使えば、Visual
C++プロジェクト中の`.cu`ファイルはnvccを使ってコンパイルされるようになります。CUDA入門者は通例CUDAコンソールアプリケーションのプロジェクトテンプレートをベースに学習します。また、
**CUDA C/C++言語** を使うコードのみを`.cu`に記述し、通常のC/C++関数としてラップして、 **CUDA C/C++言語**
を使わないコードは`.c`あるいは`.cpp`に記述するのが常套手段です。

なお、C4819はエラーではなく、Visual
C++コンパイラーからの警告です。警告を消すために、むやみにファーストパーティ製やサードパーティ製のライブラリヘッダーを書き換えるべきではありません。  
もし本当にnvccを使わなければならない（ **CUDA C/C++言語** を使わなければならない）場合、Visual
C++プロジェクト内の`.cu`ファイルのプロパティにて、  
[CUDA C/C++]→[Command Line]→[Additional Options]に  
`-Xcompiler "/wd 4819"`  
を指定すれば、ライブラリヘッダーを不必要に書き換えることなく、C4819の警告は消せます。

`-Xcompiler`はホストコンパイラーにオプションを渡すときに使用します。詳しくはnvccのマニュアルを参照してください。  
<http://docs.nvidia.com/cuda/cuda-compiler-driver-nvcc/index.html>

また、CUDA Toolkitのバージョンによって、サポートしているVisual StudioおよびVC++コンパイラーのバージョンは異なります。CUDA
Toolkit 9.1がサポートしているのはVisual Studio
2012/2013/2015/2017です。VS2010のサポートはdeprecated (廃止予定) となっています。  
<http://docs.nvidia.com/cuda/cuda-installation-guide-microsoft-
windows/index.html>

