1>main.cu.obj : error LNK2005: _main 已经在 kernel.cu.obj 中定义

1>main.cu.obj : error LNK2005: _main 已经在 kernel.cu.obj 中定义


错误原因:

kernel.cu 文件中也有一个main入口函数,  在进行编译时,生成的kernel.cu.obj 目标文件中 生成了 _main函数

_main 函数 :__main()是编译系统提供的一个函数,负责完成库函数的初始化和初始化应用程序执行环境,最后自动跳转到main()。所以说,前者是库函数,后者就是我们自己编写的main()主函数;


而 main.cu 函数 中也有一个main 函数, 因此在对 main.cu进行编译生成  main.cu.obj 后,     

在链接过程中,发现 同样的 _main 函数,因此 发生了重复定义的错误。 也就是 编译时候 不检查重复符号,链接阶段发生报错。


解决方案:

删掉 kernel.cu文件 或者 改掉该文件中的 main函数名


错误2:


>D:/work/test/wb/wb/main.cu(262): warning C4244: “初始化”: 从“double”转换到“float”,可能丢失数据
1>helpers.cu.obj : error LNK2019: 无法解析的外部符号 _cudaDeviceSynchronize@0,该符号在函数 "void __cdecl renderFusedMap(struct Image<unsigned short,struct Ref>,struct Image<struct float3,struct Ref> const &)" (?renderFusedMap@@YAXU?$Image@GURef@@@@ABU?$Image@Ufloat3@@URef@@@@@Z) 中被引用
1>kernel.cu.obj : error LNK2001: 无法解析的外部符号 _cudaDeviceSynchronize@0
1>helpers.cu.obj : error LNK2019: 无法解析的外部符号 _cudaConfigureCall@32,该符号在函数 "void __cdecl setBoxWrap(struct Volume,struct float3,struct float3,float)" (?setBoxWrap@@YAXUVolume@@Ufloat3@@1M@Z) 中被引用
1>kernel.cu.obj : error LNK2001: 无法解析的外部符号 _cudaConfigureCall@32
1>kfusion.cu.obj : error LNK2001: 无法解析的外部符号 _cudaConfigureCall@32
1>helpers.cu.obj : error LNK2019: 无法解析的外部符号 _cudaSetupArgument@12,该符号在函数 "void __cdecl __device_stub__Z9setSphere6Volume6float3ff(struct Volume &,struct float3 const &,float,float)" (?__device_stub__Z9setSphere6Volume6float3ff@@YAXAAUVolume@@ABUfloat3@@MM@Z) 中被引用
1>kernel.cu.obj : error LNK2001: 无法解析的外部符号 _cudaSetupArgument@12
1>kfusion.cu.obj : error LNK2001: 无法解析的外部符号 _cudaSetupArgument@12
1>helpers.cu.obj : error LNK2019: 无法解析的外部符号 _cudaLaunch@4,该符号在函数 "enum cudaError __cdecl cudaLaunch<char>(char *)" (??$cudaLaunch@D@@YA?AW4cudaError@@PAD@Z) 中被引用
1>kernel.cu.obj : error LNK2001: 无法解析的外部符号 _cudaLaunch@4
1>kfusion.cu.obj : error LNK2001: 无法解析的外部符号 _cudaLaunch@4
1>helpers.cu.obj : error LNK2019: 无法解析的外部符号 ___cudaRegisterFatBinary@4,该符号在函数 "void __cdecl __nv_cudaEntityRegisterCallback(void * *)" (?__nv_cudaEntityRegisterCallback@@YAXPAPAX@Z) 中被引用
1>kernel.cu.obj : error LNK2001: 无法解析的外部符号 ___cudaRegisterFatBinary@4
1>kfusion.cu.obj : error LNK2001: 无法解析的外部符号 ___cudaRegisterFatBinary@4
1>main.cu.obj : error LNK2001: 无法解析的外部符号 ___cudaRegisterFatBinary@4
1>helpers.cu.obj : error LNK2019: 无法解析的外部符号 ___cudaUnregisterFatBinary@4,该符号在函数 "void __cdecl __cudaUnregisterBinaryUtil(void)" (?__cudaUnregisterBinaryUtil@@YAXXZ) 中被引用
1>kernel.cu.obj : error LNK2001: 无法解析的外部符号 ___cudaUnregisterFatBinary@4
1>kfusion.cu.obj : error LNK2001: 无法解析的外部符号 ___cudaUnregisterFatBinary@4
1>main.cu.obj : error LNK2001: 无法解析的外部符号 ___cudaUnregisterFatBinary@4
1>helpers.cu.obj : error LNK2019: 无法解析的外部符号 ___cudaRegisterFunction@40,该符号在函数 "void __cdecl __nv_cudaEntityRegisterCallback(void * *)" (?__nv_cudaEntityRegisterCallback@@YAXPAPAX@Z) 中被引用
1>kernel.cu.obj : error LNK2001: 无法解析的外部符号 ___cudaRegisterFunction@40
1>kfusion.cu.obj : error LNK2001: 无法解析的外部符号 ___cudaRegisterFunction@40
1>kernel.cu.obj : error LNK2019: 无法解析的外部符号 _cudaGetLastError@0,该符号在函数 "enum cudaError __cdecl addWithCuda(int *,int const *,int const *,unsigned int)" (?addWithCuda@@YA?AW4cudaError@@PAHPBH1I@Z) 中被引用
1>kfusion.cu.obj : error LNK2001: 无法解析的外部符号 _cudaGetLastError@0
1>kernel.cu.obj : error LNK2019: 无法解析的外部符号 _cudaGetErrorString@4,该符号在函数 "enum cudaError __cdecl addWithCuda(int *,int const *,int const *,unsigned int)" (?addWithCuda@@YA?AW4cudaError@@PAHPBH1I@Z) 中被引用
1>kfusion.cu.obj : error LNK2001: 无法解析的外部符号 _cudaGetErrorString@4
1>kernel.cu.obj : error LNK2019: 无法解析的外部符号 _cudaFree@4,该符号在函数 "enum cudaError __cdecl addWithCuda(int *,int const *,int const *,unsigned int)" (?addWithCuda@@YA?AW4cudaError@@PAHPBH1I@Z) 中被引用
1>main.cu.obj : error LNK2001: 无法解析的外部符号 _cudaFree@4
1>kernel.cu.obj : error LNK2019: 无法解析的外部符号 _cudaMalloc@8,该符号在函数 "enum cudaError __cdecl addWithCuda(int *,int const *,int const *,unsigned int)" (?addWithCuda@@YA?AW4cudaError@@PAHPBH1I@Z) 中被引用
1>kfusion.cu.obj : error LNK2001: 无法解析的外部符号 _cudaMalloc@8
1>kernel.cu.obj : error LNK2019: 无法解析的外部符号 _cudaDeviceReset@0,该符号在函数 "int __cdecl kkkmain(void)" (?kkkmain@@YAHXZ) 中被引用
1>kernel.cu.obj : error LNK2019: 无法解析的外部符号 _cudaSetDevice@4,该符号在函数 "enum cudaError __cdecl addWithCuda(int *,int const *,int const *,unsigned int)" (?addWithCuda@@YA?AW4cudaError@@PAHPBH1I@Z) 中被引用
1>kernel.cu.obj : error LNK2019: 无法解析的外部符号 _cudaMemcpy@16,该符号在函数 "enum cudaError __cdecl addWithCuda(int *,int const *,int const *,unsigned int)" (?addWithCuda@@YA?AW4cudaError@@PAHPBH1I@Z) 中被引用
1>kfusion.cu.obj : error LNK2019: 无法解析的外部符号 _cudaSetDeviceFlags@4,该符号在函数 "public: void __thiscall KFusion::Init(struct KFusionConfig const &)" (?Init@KFusion@@QAEXABUKFusionConfig@@@Z) 中被引用
1>kfusion.cu.obj : error LNK2019: 无法解析的外部符号 _cudaHostAlloc@12,该符号在函数 "public: void __thiscall Host::alloc(unsigned int)" (?alloc@Host@@QAEXI@Z) 中被引用
1>main.cu.obj : error LNK2019: 无法解析的外部符号 _cudaFreeHost@4,该符号在函数 "public: __thiscall Host::~Host(void)" (??1Host@@QAE@XZ) 中被引用
1>D:\work\test\wb\Debug\wb.exe : fatal error LNK1120: 17 个无法解析的外部命令
========== 生成:  成功 0 个,失败 1 个,最新 0 个,跳过 0 个 ==========


原因 : 强制关机后,重启打开vs2013后,重新打开项目,自动配成了 win32项目平台, 与库目录中cuda的64位的路径和库 不一致,导致找不到。

解决方案:调整平台,调整目标计算机类型。




报错:

 模块计算机类型“X86”与目标计算机类型“x64”冲突


调整平台,方法错误,不能直接在平台下拉菜单选择,不起作用,确定后,重新查看,依然是win32平台。

需要打开配置管理器选择,改成X64.




参考资料:

编译cuda程序出错

  1. Q
    1>LINK : warning LNK4075: 忽略“/INCREMENTAL”(由于“/LTCG”规范)
    1>test.cu.obj : error LNK2005: _main 已经在 kernel.cu.obj 中定义
    1>test.cu.obj : error LNK2001: 无法解析的外部符号 __imp__cutCheckCmdLineFlag@12
    1>test.cu.obj : error LNK2001: 无法解析的外部符号 __imp__cutGetCmdLineArgumenti@16
    1>F:\c++\vs2010\example\Release\example.exe : fatal error LNK1120: 2 个无法解析的外部命令
  2. A
    全天下的 LINK 错误 都是一样的,就是编译器 找不到那个函符号。
    你要顺藤摸瓜,看看你link 不到的那个外部符号在哪里,你的编译器用引用了没有..

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值