CUDA学习笔记(1)

在阅读《GPU高性能运算之CUDA》第26页的matrixAssign例程时,按照书中的代码进行编译时,遇到了点问题。

源文件example_1.cu中的前几行代码如下所示:

     #include <stdlib.h>  //系统头文件
     #include <stdio.h>
     #include <string.h>
     #include <math.h>
     #include <cutil.h>  //项目头文件
     #include <example_1_kernel.cu> // 核函数,GPU端代码

编译时无法通过,出现如下信息:

     error LNK2005: "void __cdecl __device_stub__Z10testKernelPfS_(float *,float *)" 已经在 example_1.cu.obj 中定义

     error LNK2005: "void __cdecl testKernel(float *,float *)"已经在 example_1.cu.obj 中定义

     fatal error LNK1169: 找到一个或多个多重定义的符号

经过上网一番查询,看到很多网友在学习这个例程时都出现了这个问题,他们分析了原因并给出了解决方案:

原因:example_1.cu中已声明包含了example_1_kernel.cu,在编译example_1.cu时,就已经生成了example_1_kernel.cu中的函数体。如工程中还有example_1_kernel.cu,那么vs会尝试再次编译example_1_kernel.cu,生成的函数体重复了。

解决方案:      

        方法一:在解决方案资源管理器右键选择example_1_kernel.cu,单击属性,在“从生成中排除”中选择“是”。单击确认,此次生成成功。

        方法二:将example_1_kernel.cu的后缀名修改为cuh,并将example_1.cu中前几行代码修改如下:

                       #include <stdlib.h>  //系统头文件
                       #include <stdio.h>
                       #include <string.h>
                       #include <math.h>
                       #include <cutil.h>  //项目头文件
                       #include “example_1_kernel.cuh”

                       即可编译成功,运行结果如下图所示:

    

 

 

评论 3
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值