未定义引用“ cudaGetDeviceCount”未定义引用“ cudaGetDeviceProperties”

时间:2018-11-27 02:37:02

标签: makefile cuda nvidia

checkGPU.cpp:

#include<iostream>
#include "cuda_runtime_api.h"
#include "device_launch_parameters.h"
#include <stdio.h>
int main()
{
    cudaDeviceProp prop;

    int count;
    cudaGetDeviceCount(&count);
   // cudaGetDeviceCount(&count);//获取设备数
    for(int i=0;i<count;i++)
    {
        cudaGetDeviceProperties(&prop,i);//将第i个GPU数据放到prop中
        std::cout<<"显卡名称:"<<prop.name<<std::endl;
        std::cout<<"显存大小:"<<prop.totalGlobalMem/1024/1024<<" MB"<<std::endl;
        std::cout<<"一个block的共享内存大小:"<<prop.sharedMemPerBlock/1024<<" KB"<<std::endl;
        std::cout<<"block最大线程数:"<<prop.maxThreadsPerBlock<<std::endl;
    }
    system("pause");
return 0;
}

makefile是:

.PHONY: clean, all
CC=gcc
CXX=g++
CFLAGS=-Wall -g -O3 

INCLUDE=-I./ \
        -I/usr/local/cuda-9.0/include

LIBS =-L/usr/lib -lcuda


OBJS= checkGPU.o
all:
    make checkGPU
checkGPU: checkGPU.o
    $(CXX) -std=c++11 checkGPU.o -o checkGPU $(LIBS) $(OBJS)
.cpp.o:
    $(CXX) -std=c++11 $(INCLUDE) -fPIC -c $< -o $@
clean:
    -rm *.o
    -rm checkGPU

最后,做到这一点,错误是:

Undefined reference to ‘cudaGetDeviceCount’ Undefined reference to ‘cudaGetDeviceProperties’

1 个答案:

答案 0 :(得分:2)

cudaGetDeviceCount()cudaGetDeviceProperties()CUDA Runtime API的一部分。要使用这些,您必须链接libcudart。 libcuda是CUDA Driver API,基本上是使用CUDA的完全不同的方式。尽管it is possible to mix都是两个API,但只有在绝对必要时才是更好的选择。就您而言,您似乎只是打算只使用CUDA Runtime API。在这种情况下,只需链接-lcudart而不是-lcuda

除此之外,请注意,system("pause");很可能对您没有多大帮助,因为您似乎正在使用Linux…