生成一个项目的时候会有两部分:编译和链接。
在链接的时候发生这个错误,
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里。