2011-12-15 6 views
2

に未定義の参照、私はLinuxでのCUDAプログラムをコンパイルしようとしていると私は、次のリンカエラーを取得:CUDAのリンカエラー:メイン

/usr/lib/gcc/x86_64-redhat-linux/4.4.4/../../../../lib64/crt1.o: In function `_start': 
(.text+0x20): undefined reference to `main' 
collect2: ld returned 1 exit status 

これは私のMakefileです:

mtrand.o : mtrand/mtrand.cpp 
    nvcc -I"./mtrand" -O2 -c mtrand/mtrand.cpp 

CUDAMCMLrng.o : CUDAMCMLrng.cu 
    nvcc --use_fast_math -O2 -c CUDAMCMLrng.cu 

kernel.o : CUDAMCMLrng.o kernel.cu 
    nvcc --use_fast_math -O2 -c kernel.cu 

main.o : mtrand.o CUDAMCMLrng.o kernel.o main.cu 
    nvcc --use_fast_math -O2 -Xcompiler "-fopenmp -Wall" -c main.cu 

lab : main.o mtrand.o CUDAMCMLrng.o kernel.o 
    nvcc -lgomp -o lab main.o mtrand.o CUDAMCMLrng.o kernel.o 

main関数はmain.cuファイルにありますが、なんらかの理由でリンカがそれを見ていません。 誰かが私に間違っていることを教えてもらえますか?

ありがとうございます!

+0

'binutils'は' objdump'をこれらのオブジェクトファイルで動かすのですか、それともNVIDIAが提供していますか? –

+0

* g ++ *との最終的なリンクを試みましたか?理論的には違いはありませんが、誰が知っていますか? – tbalazs

+0

はい私はそれを試したが、それは何の違いもありませんでした。とにかくありがとう。 – santisan

答えて

1

最終的なリンクは、nvccではなくg ++で行うことをお勧めします。 .oファイルとライブラリのみをリンク行への入力として使用する場合は、nvccを使用する必要はありません。