CUDA3.0在vs2008sp1 64位操作系统的链接出错

[复制链接]
查看11 | 回复2 | 2010-3-1 11:08:29 | 显示全部楼层 |阅读模式
环境:
驱程:197.13
toolkit & sdk : 3.0
vs2008 sp1
win7 ultimate x64
之前按照自己的方法+开勇的cudawizard配好cuda 2.3的环境,能顺利编译
更新了cuda 3.0
使用http://space.itpub.net/23172605/viewspace-630175 的方法配置,
使用devicequery.exe和matrixmul.exe都运行正常
新的cu文件也应用了cuda build rules v3.0.14。
按说明新建了一个win32控制台应用程序,添加了main.cu
单个编译main.cu是无问题的,到了链接阶段,出现以下信息:
1>main.cu.obj : error LNK2001: 无法解析的外部符号 __GSHandlerCheck
1>main.cu.obj : error LNK2019: 无法解析的外部符号 printf,该符号在函数 "bool __cdecl InitCUDA(void)" (?InitCUDA@@YA_NXZ) 中被引用
1>main.cu.obj : error LNK2019: 无法解析的外部符号 fprintf,该符号在函数 "bool __cdecl InitCUDA(void)" (?InitCUDA@@YA_NXZ) 中被引用
1>main.cu.obj : error LNK2019: 无法解析的外部符号 __iob_func,该符号在函数 "bool __cdecl InitCUDA(void)" (?InitCUDA@@YA_NXZ) 中被引用
1>main.cu.obj : error LNK2019: 无法解析的外部符号 __security_cookie,该符号在函数 "bool __cdecl InitCUDA(void)" (?InitCUDA@@YA_NXZ) 中被引用
1>main.cu.obj : error LNK2019: 无法解析的外部符号 __security_check_cookie,该符号在函数 "bool __cdecl InitCUDA(void)" (?InitCUDA@@YA_NXZ) 中被引用
1>main.cu.obj : error LNK2019: 无法解析的外部符号 atexit,该符号在函数 "void __cdecl __sti____cudaRegisterAll_50_tmpxft_000013ac_00000000_8_main_compute_20_cpp1_ii_29d55712(void)" (?__sti____cudaRegisterAll_50_tmpxft_000013ac_00000000_8_main_compute_20_cpp1_ii_29d55712@@YAXXZ) 中被引用
1>LINK : error LNK2001: 无法解析的外部符号 mainCRTStartup
1>I:\document\My Documents\Visual Studio 2008\Projects\Cpp\Test\Test_CUDA30\Debug\Test_CUDA30.exe : fatal error LNK1120: 8 个无法解析的外部命令

搜索过__GSHandlerCheck的解决方法,说在项目属性的C/C++下面设置一个选项,但应用了cuda build rules后C/C++已经不见了。
请问该如何解决?谢谢
附main.cu
#include
#include
#if __DEVICE_EMULATION__
bool InitCUDA(void){return true;}
#else
bool InitCUDA(void)
{

int count = 0;

int i = 0;

cudaGetDeviceCount(&count);

if(count == 0) {

fprintf(stderr, "There is no device.\n");

return false;

}

for(i = 0; i = 1) {

break;

}

}

}

if(i == count) {

fprintf(stderr, "There is no device supporting CUDA.\n");

return false;

}

cudaSetDevice(i);

printf("CUDA initialized.\n");

return true;
}
#endif
int main(int argc, char** argv)
{

printf("Hello world\n");

if (!InitCUDA())

{

return 0;

}

return 0;
}

[ 本帖最后由 vls 于 2010-3-30 17:47 编辑 ]
回复

使用道具 举报

千问 | 2010-3-1 11:08:29 | 显示全部楼层
用rule编译
回复

使用道具 举报

千问 | 2010-3-1 11:08:29 | 显示全部楼层
原帖由 OpenHero 于 2010-3-30 17:26 发表
用rule编译

刚才写错了,是链接阶段出错。
右点main.cu点编译是能顺利编译, 生成obj,但不知道怎样才能顺利生成exe
回复

使用道具 举报

您需要登录后才可以回帖 登录 | 立即注册

本版积分规则

主题

0

回帖

4882万

积分

论坛元老

Rank: 8Rank: 8

积分
48824836
热门排行