我们的项目结构是这样的。
1)MainApp,它使用boost动态加载dll,所有的dll项目/模块都是用/MD构建的。
2) 这些 dll 所需的任何其他项目都构建为静态 (.lib) 或动态 (.dll) 库。当这些依赖库是动态的时没有问题,因为我可以使用相同的 MD。但是,如果它们是静态的,我必须使用 MD 而不是默认的 MT 来构建它们,否则无法将其加载到这些 dll 中。
这一直有效,直到我尝试编译 google cloud sdk c++。
这就是问题所在:Google cloud c++ sdk 有许多随 google git 一起提供的依赖项,但 Google 仅包含(或构建默认)静态(/MT)版本。他们甚至不提供更改为 MD 的选项。我可以使用 cmake 命令将谷歌云库从 /MT 更改为 /MD set(CMAKE_CXX_FLAGS_RELEASE "/MD")
,但这不会构建,因为它的依赖项是 /MT。
简化情况:
MainApp.exe 动态加载 -> Function.dll (/MD), 然后 Function.dll 静态链接 Google_cloud.lib (.lib 但带有 /MD), 然后 Google_cloud.lib 静态链接其依赖项 (.lib 带有 /MT, 可以' t 将其更改为 /MD)
所以我想唯一的选择是使用 /MD 手动自定义构建谷歌云的静态依赖项,然后使用 /MD 将谷歌云构建为静态,然后由我的 function.dll 作为静态加载。
有什么建议吗?