找到一个或多个多重定义的符号问题 link1169 求助啊!!1

我按照张舒赵开勇他们写的那本GPU高性能计算之cuda(貌似是这个名字),写的他第二章第一个和第二个example,运行结果都是这个错误,找不到exe,如图,求高手指点[attach]793[/attach]不知道各位看的清不,反正就是两个link2005,然后一个致命错误说是找到一个或多个多重定义的符号

楼主能把代码贴出来吗,这样信息太少

肯定是那里语句有错误,能帖出代码嘛

是不是说你在.cu文件中写的调用kernel的函数被重定义了
如果是这样的话可以在生成时讲.cu文件排除或者将其后缀改成.cuh

#include <stdlib.h>
#include<stdio.h>
#include<string.h>
#include<math.h>
#include<cutil.h>
#include"matrixassign_kernel.cu"

//函数声明
void runtest(int argc,char**argv);

//主函数
int main(int argc,char**argv)
{
runtest(argc,argv);
CUT_EXIT(argc,argv);//退出CUDA
}

void runtest(int argc,char** argv)
{
CUT_DEVICE_INIT(argc,argv);//启动CUDA
unsigned int num_blocks=4;
unsigned int num_threads=4;
unsigned int mem_size=sizeof(float)num_threadsnum_blocks;

//在host端分配显存,h_表示host端,i表示input,o表示output	
float*h_idata=(float*)malloc(mem_size);
float*h_odata=(float*)malloc(mem_size);

//在device端分配显存,d_表示device端
float* d_idata;
CUDA_SAFE_CALL(cudaMalloc((void**)&d_idata,mem_size));
float* d_odata;
CUDA_SAFE_CALL(cudaMalloc((void**)&d_odata,mem_size));


//初始化内存中的值
for(unsigned int i=0;i<num_threads*num_blocks;i++)
	h_idata[i]=1.0f;
//将内存中数据读入显存
CUDA_SAFE_CALL(cudaMemcpy(d_idata,h_idata,mem_size,cudaMemcpyHostToDevice));

//设置运行参数
dim3 grid(num_blocks,1,1);
dim3 threads(num_threads,1,1);

//运行内核函数,调用GPU运算
testkernel<<<grid,threads,mem_size>>>(d_idata,d_odata);

//检查GPU是否运行正常
CUT_CHECK_ERROR("Kernel execution failed");

//将结果从显存写入内存
CUDA_SAFE_CALL(cudaMemcpy(h_odata,d_odata,mem_size,cudaMemcpyDeviceToHost));

//打印结果
for(unsigned int i=0;i<num_blocks;i++)
{
	for(unsigned int j=0;j<num_threads;j++)
	{
		printf("%5.0f",h_odata[i*num_threads+j]);
	}
	printf("\n");
}


//释放存储器
free(h_idata);
free(h_odata);
CUDA_SAFE_CALL(cudaFree(d_idata));
CUDA_SAFE_CALL(cudaFree(d_odata));

}

#ifndef EXAMPLE_1_KERNEL_H
#define EXAMPLE_1_KERNEL_H

global void testkernel(float* g_idata,float* g_odata)
{
extern shared float sdata;

const unsigned int bid=blockIdx.x;
const unsigned int tid_in_block=threadIdx.x;
const unsigned int tid_in_grid=blockDim.x*blockIdx.x+threadIdx.x;

//将数据从global读入share memory, 读入数据后进行一次同步,保证计算时所有数据均已到位
sdata[tid_in_block]=g_idata[tid_in_grid];
__syncthreads();


//计算,需要进行同步,确保要写入的数据已经被更新
sdata[tid_in_block]*=(float)bid;
__syncthreads();


//将shared memory中的数据写到global memory
g_odata[tid_in_grid]=sdata[tid_in_block];

}

#endif

上面就是我的代码,host和kernel的,之前的说的办法试了,木有效果滴说,不过依旧谢谢关注