我有一个我分发的dll,它不会在某些Windows操作系统上运行。使用dependancy walker我发现这些系统上缺少msvcp90d.dll。我不要想要任何需要C ++可再发行的运行时依赖项,并且因为调用DLL的应用程序不是用C ++编写的,所以它对C ++可再发行组件没有任何依赖性。
我猜我在编译dll的时候在链接器首选项中留下了DEBUG选项,这就是为什么它需要msvcp90d.dll?
增加: Appologies,我在我的原始问题中粘贴了错误的dll名称....在显示器前面太多小时......
这是我在VS2008中编写的第三方dll。
答案 0 :(得分:3)
MSVCP90与调试无关(即msvcp90d)。您可以通过将编译器切换到/ MT(而不是/ MD)来删除您的依赖关系。您还需要确保链接到的每个静态库都已编译/ MT。
我建议不要构建应用程序/ MT,因为它会对系统性能产生严重的负面影响,并且在CRT出现安全问题时需要更长时间的服务。
最后,请注意/ MT表示您的CRT是私有的。因此,您必须确保CRT / STL类型不会跨越DLL边界。
马丁
答案 1 :(得分:2)
我看到你的选择:
答案 2 :(得分:1)
它需要MSVCP90.dll,因为最有可能使用Visual Studio 2008编译dll。那是发布运行时。简短的回答是,如果您不希望C ++运行时依赖项不使用C ++库或应用程序。
但是,您可以执行以下任何操作来解决问题: