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

生成一个项目的时候会有两部分:编译和链接。
在链接的时候发生这个错误,
1>pluginMain.obj : error LNK2005: _DllMain@12 已经在 helix_plugin2Cmd.obj 中定义
1>pluginMain.obj : error LNK2005: "struct HINSTANCE__ * MhInstPlugin" (?MhInstPlugin@@3PAUHINSTANCE__@@A) 已经在 helix_plugin2Cmd.obj 中定义
1>pluginMain.obj : error LNK2005: _MApiVersion 已经在 helix_plugin2Cmd.obj 中定义
出现的原因是因为全局变量的重复定义。
比如在a.h中申明了全局变量 int global;在b.h中申明 extern int global;则include a.h相当于吧a.h中全局变量的申明又include进来了,所以编译器会认为是重复编译。
所以平时全局变量的定义应该:在.h里extern , 实际定义在cpp里。
但是,现在dllmain这些变量我找不到,因为用的maya自己的库,所以定义这些都在它的文件里。所以第一个比较笨的方法就是将两个cpp合并为一个文件,一个cpp对应一个obj,这样就避免了重复定义。
好一点的解决方案则是在属性-链接-命令行中添加 /force:multiple,强制允许多重定义,则编译的时候会自动忽略第二个定义。

但这个解决方案的缺点在于如果第二个定义才是需要的,那程序运行肯定是会出错的。
所以从根本上解决这个问题还是平时全局变量的定义应该:在.h里extern , 实际定义在cpp里。






  • 3
    点赞
  • 7
    收藏
    觉得还不错? 一键收藏
  • 2
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论 2
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值