2011-12-15 3 views
2

나는 리눅스에서 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 

이 내 메이크입니다 :

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를 사용할 이유가 없습니다.