C++ MSVC中多函数定义的强制解析

C++ MSVC中多函数定义的强制解析,c++,visual-studio,linker,linker-errors,C++,Visual Studio,Linker,Linker Errors,我正在尝试链接一个项目,该项目有两个库,它们共享函数(一个是另一个的分支),并且具有程序所需的唯一函数。因为它们共享函数,链接器会抱怨多个定义。在MSVC中有没有一种方法可以强制“使用您遇到的第一个”而不必在体系结构上更改某些内容?简单来说,您需要使用/force:MULTIPLE链接器选项使VC++生成有效的exe或dll文件,即使存在多个定义。您需要将此添加到: 属性->链接器->命令行->其他选项 您可以查看MSDN文档以查看注意事项。生成的文件可能无法按预期工作,文档中也没有说明链接器将

我正在尝试链接一个项目,该项目有两个库,它们共享函数(一个是另一个的分支),并且具有程序所需的唯一函数。因为它们共享函数,链接器会抱怨多个定义。在MSVC中有没有一种方法可以强制“使用您遇到的第一个”而不必在体系结构上更改某些内容?

简单来说,您需要使用/force:MULTIPLE链接器选项使VC++生成有效的exe或dll文件,即使存在多个定义。您需要将此添加到:

属性->链接器->命令行->其他选项

您可以查看MSDN文档以查看注意事项。生成的文件可能无法按预期工作,文档中也没有说明链接器将使用它看到的第一个定义,尽管可能是这样。如果在没有任何选项的情况下使用/FORCE,它的工作方式就好像传递了两个选项/FORCE:MULTIPLE/FORCE:UNRESOLVED

对于更细粒度的解决方案,您可以确保链接器采用它看到的第一个定义,请查看以下答案:


这就是静态库正常工作的方式。您是在使用DLL,还是只是在项目中包含对象文件?我正在静态链接到这些库(MT版本的.libs),没有DLL可能会有帮助:。lib可以是导入库,也可以是静态库。如果在同一源文件中有一个重复的函数,并且有一些唯一的函数,则可能会出现此错误,但这种情况很少见。或者,如果您使用/wholerchive,请停止使用它。@meguli-/FORCE:MULTIPLE linker option可能已经解决了这个问题,它似乎忽略了以前定义的函数的第二个定义。有人在回答中描述一下,我会接受的。