我有一个 C++ 项目,到目前为止编译和链接都没有问题,但由于最近的计算机崩溃,我不得不重新安装所有东西,包括 Visual Studio 和我所有的 VCPKG 包。(我使用的是 VS 2022 预览版,之前是这样。)
我的项目使用了许多静态链接的库,包括英特尔的 TBB 和 Armadillo(这取决于 OPENBLAS 等)。但是,需要注意的是,即使项目使用静态链接,OPENBLAS 和 TBB 仍然需要链接 DLL。
现在我正在用以前工作的相同项目属性编译同一个项目,并且不断收到 LNK2005 错误,指出:
DllMain 已在 openblas.lib(memory.c.obj) 中定义..... tbb_debug.lib(tbb_main.obj)
如果我切换链接顺序,所有发生的都是错误更改为
DllMain 已在 tbb_debug.lib(tbb_main.obj).... openblas.lib(memory.c.obj) 中定义
[注意:在发布和调试配置中链接是同样的问题。]
现在我想不通的是为什么会发生这种情况。当然,项目依赖多个导入的 DLL 是正常的。DLL 导出它们的 DllMain 入口点函数是很正常的。
由于 PC 崩溃,我被迫将所有内容升级到绝对最新版本,我想知道这是否在某个地方引入了问题。
这是 MSVC 中的一个错误,它认为来自两个不同 DLL 的两个 DllMain 函数存在冲突?
如果这是一个真正的冲突,有人可以向我解释一下,使用第三方 DLL 构建大型项目的人不会经常发生这种情况吗?
我已经尝试了所有方法,包括全新安装 VCPKG,但没有任何帮助。
我发现完成链接的唯一选择是使用 /FORCE:MULTIPLE 选项,我真的不喜欢它,因为它可能会创建有缺陷的可执行文件。
这里的任何建议将不胜感激。