0

CUDA モジュールを使用して後押ししたい C プロジェクトがあります。しかし、どういうわけか、外部で定義された変数は解決できません。Microsoft Visual C++ 2010 Express と CUDA Toolkit 5.0 を使用しています。

以下は、私の最小限の(そうではない)動作例を示しています。

main.c:

#include "main.h"
#include <stdio.h>
#include "cuda_test.cu"

int main( int argc, const char* argv[] )
{
    testfunc();
    return 1;
}

main.h:

#ifndef main_h
#define main_h

extern float PI;

#endif

testfile.c:

#include "main.h"

float PI = 3;

cuda_test.cu:

#include "main.h"
#include <stdio.h>

void testfunc()
{
    printf("Hello from cudafile: %E", PI);
}

これにより、次のエラーが発生します。

1>------ Build started: Project: cuda_min, Configuration: Debug Win32 ------
1>cuda_test.cu.obj : error LNK2001: unresolved external symbol "float PI" (?PI@@3MA)
1>D:\Backup\diplomarbeit\cuda_xanthos\cuda_min\Debug\cuda_min.exe : fatal error LNK1120: 1 unresolved externals
========== Build: 0 succeeded, 1 failed, 0 up-to-date, 0 skipped ==========

変数 PI を関数 testfunc に渡すと、目的の動作が得られます。これは私のプロジェクト (実際には CUDA デバイスを使用する) で行っていることですが、約 20 個の変数を関数に渡したくありません。

nvccの設定が不足していると思います...

どんな助けでも大歓迎です。

4

1 に答える 1

1

.cu.cppではなくとしてコンパイルおよびリンクされ.cます。したがって、ファイルの名前を に変更するか、.cファイル.cppで使用extern "C"することができ.cuます。

于 2013-02-04T01:02:39.993 に答える