가 여기 내 메이크 파일 출력입니다 : 내가 kmeans();
, kmeans 전화CUDA는 아키텍처 x86_64의 운영 체제에 대한 정의되지 않은 기호는 X
nvcc -c -arch=sm_35 src/kmeans_cuda.cu
nvcc -c -arch=sm_35 src/sequence.c
nvcc -c -arch=sm_35 src/io.c
nvcc -c -arch=sm_35 src/main.c
nvcc -g -o cuda-means kmeans_cuda.o sequence.o io.o main.o
Undefined symbols for architecture x86_64:
"_kmeans", referenced from:
_main in main.o
(maybe you meant: cudaError (anonymous namespace)::cudaLaunch<char>(char*))
ld: symbol(s) not found for architecture x86_64
collect2: ld returned 1 exit status
make: *** [all] Error 1
내 주요 기능에, kmeans_cuda.cu에 정의 된 C 함수이다
void kmeans() {
long i,h,j,k; //counters
long delta; //Number of objects has diverged in current iteration
long nearest; //Nearest centroid
unsigned int distance,min_distance; //distance calculated by relation point-cluster
int *count,*recv_count;
int *send_label;
double begin,end,trans_init,trans_end;
// should call kernel, but is not calling yet, because it's not implemented ...
kmeans() 선언에 이미 __host__
을 추가하려고했지만 문제가 해결되지 않았습니다. 나는 왜이 오류가 발생하는지 생각하고있다. 왜냐하면 나는 객체를 함수와 연결하고 있기 때문이다.
nvcc에'-m64' 옵션을 추가하십시오. 그리고/또는 .cpp를 .cpp로 변경하십시오. – kangshiyin
@ Eric : 이것은 아키텍처 불일치가 아니라 C++ 심볼 맹 글링 문제입니다. – talonmies
@talonmies 그래서 나는 두 가지 추측을한다. – kangshiyin