編集:この問題は、malloc(3)呼び出しをchar *にキャストしないときに受け取るエラーのために、nvccがCコンパイラではなくC++コンパイラを呼び出すことが原因であると考えています。私はこの主張に導かれます:void*からchar**への無効な会話
EDITEDIT:fileO = fopen(version、 "w");を使用すると正常に動作します。strcpyおよびstrcat呼び出しをバイパスします。(はは、私はキャットコールと言いました...)
そのため、同じプログラムのシーケンシャルバージョン(非CUDA)からファイルI/Oを収集したCUDAプログラムがあります。まったく同じコードが通常のgccコンパイルで機能しますが、nvccでは機能しません。nvccがC/C++をネイティブC++コンパイラにシャントすることは知っていますが、何らかの理由で、書き込み可能なファイルを開いていないだけです。上記のコードのデータを読み込むために別のファイルストリームを開いたり閉じたりしましたが、これをシーケンシャルバージョンで行うと、そこで正常に機能します。
関連するコードは次のとおりです。
else
{
char* version = "matrixExpCUDAx";
char* filename = (char *)malloc(strlen(version) + strlen(argv[3]));
strcpy(filename, version);
strcat(filename, argv[3]);
FILE *fileO;
fileO = fopen(filename, "w");
if(DEBUG)
{
for (i=0; i<(dim*dim); i++) fprintf(stderr, "%f\n", h_O[i]);
}
else
{
if(fileO != NULL)
{
for (i=0; i<(dim*dim); i++)
{
fprintf(fileO, "%f\n", h_O[i]);
}
fclose(fileO);
}
else fprintf(stderr, "Write file failed to create\n");
}
}
....
毎回「書き込みファイルの作成に失敗しました」というメッセージが表示されます。
何か案は?