2016-06-21 82 views
1

这是对this question (MSVCP140.dll missing)的补充。在VS中编译程序,不需要任何外部运行时DLL

我想编译一个Windows机器的程序。这里需要注意的是我没有在其上安装软件的权限,但我可以运行可执行文件。

每次我在有问题的Windows机器上运行它时,都会出现MSVCP140.dll问题。我跟着the solution of the question I have linked(这是静态链接),对于一些非常奇怪的原因,我仍然得到错误(即使我知道这使得程序在得到相同错误时在同事计算机上运行)。

还有什么我可以做的,这将使程序(缺乏更好的条款)完全可移植?我需要在VS中更改任何更多设置,以便将库完全编译为可执行文件?

我将进一步强调事实我已经看到使用静态链接使用/ MT选项进行编译的解决方案,我仍然缺少.dll问题。

我试图复制MSVCP140.dll旁边我的可执行文件,它确实解决了这个问题,但还有另一个缺少.dll,我不能递增地添加.dlls,直到程序开始工作。如果这是唯一的解决方案,我很高兴将所有的.dll文件捆绑在一起,但是我想知道哪些是需要的,所以我不必在绝望的情况下复制整个system32文件夹。

+0

首先,你必须知道你的应用程序,然后你应该知道它的依赖关系,一个用LoadLibrary()加载的缺失依赖可能很难被发现,或者长时间被忽视。这就是说你可以用一个名为DependencyWalker的小工具来检查依赖关系。另外请注意,如果你静态链接所有的C++ RT DLL,那么它应该在每一台机器上都能正常工作,所以应该有其他的东西在那里丢失...... –

+0

@AdrianoRepetti相信我,我很困惑,为什么静态链接是不工作。 – ZoSal

+0

您是否对依赖于MSVCP140的任何其他(部署)DLL有依赖性?您应该使用Dependency Walker探索您的依赖关系树以获得更好的概览 –

回答

2

去使用dependency walker找出你需要什么DLL,以及为什么你需要它们。这可能是启发性的,并导致通过使用替代方法来切除许多依赖关系的路径。如果你确定你没有在消费者运行时导入某些函数(例如,你只是为了调试目的而导入它们),那么你可以选择delay load它们。