8

gcc と CUDA の質問

やあ、

CUDA 共有ライブラリをコンパイルしましたが、それを使用するメイン プログラムとリンクできません。メインプログラムを gcc でコンパイルしています。

コード:

simplemain.c

    #include <stdio.h>
    #include <stdlib.h>



    void fcudadriver();

    int main()
    {
      printf("Main \n");
      fcudadriver();
      return 0;
    }

test.cu

    __global__ void fcuda()
    {
    }

    void fcudadriver()
    {
      fcuda<<<1,1>>>();
    }

私はtest.cuを次のようにコンパイルします->それは動作します

    nvcc --compiler-options '-fPIC' -o libtest.so --shared test.cu

simplemain.c を次のようにコンパイルします ---> エラーが発生します :(

    gcc simplemain.c -L. -ltest
    /tmp/ccHnB4Vh.o:simplemain.c:function main: error: undefined reference to 'fcudadriver'
    collect2: ld returned 1 exit status
4

2 に答える 2

2

gcc の代わりに g++ を使用してみてください。nvcc は、C++ スタイルのリンク規則を使用します。(ファイルの名前を変更する必要はありません。)

または、gcc を使用する必要がある場合は、次のvoid fcudadriver()ように関数定義を前に付けます。

extern "C" void fcudadriver()
于 2013-01-20T05:51:06.387 に答える
2

C と C++ では、関数の命名方法が異なります。

nvcc は .cu ファイルの CPU コードを C++ として扱うため、名前を に変更simplemain.csimplemain.cppてコンパイルできますg++

別の解決策はextern "C"、.cu ファイルの関数定義の前に追加することです。

于 2013-01-20T05:45:10.877 に答える