当我在另一台计算机上执行.exe(在我的机器上编译)时,它会给我这个错误

时间:2017-12-03 18:00:03

标签: c++ windows visual-studio-2017

这是我第一次使用Visual Studio 2017.我在PC上用C ++构建了一个简单的程序。我很想知道我的程序是否适用于另一台PC。我试图在另一台计算机上执行def parse_to_number(var): try: return int(var) except ValueError: return 0 inputFile = open("Students_1.txt" , 'w') inputFile.write("John Smith 80 90\n") inputFile.write("Ryan Brown 80 60\n") inputFile.write("Anna Myers 95 85\n") inputFile.close() inputFile = open("Students_1.txt" , 'r') for line in inputFile: y = line.split() first_name = y[0] last_name = y[1] first_num = parse_to_number(y[2]) sec_num = parse_to_number(y[3]) print(first_num,sec_num) ,它给了我这样的错误:

  

vs(一些字母和数字).dll缺失。

我认为有问题的.exe是Visual Studio的一部分。

我尝试了第三台PC,这次.dll停止工作,并在执行cmd后无响应。

当我使用.exe中的g ++编译功能使用MinGW进行编译时,我也遇到了这个问题。当我在另一台PC上执行用MinGW编译的程序时,它给了我同样的错误,但这次它说的是

  

gw ... dll缺失

有没有办法在我希望运行程序的任何其他PC上安装Visual Studio(或MinGW)时避免此错误?

如果您对代码感兴趣,我可以把它放在这里,但我不认为这是问题所在,因为我对其他所有问题都有同样的问题cmd在我的电脑上编译。

这是错误的图片:

image

2 个答案:

答案 0 :(得分:3)

对于Visual Studio,您需要安装Visual C++ Redistributable libraries或提供应用程序所需的库.exe文件(我不确定它是否违反许可证)。

对于MinGW,您还需要提供所需的DLL。我想你需要libgcc_s_dw2-1.dlllibstdc++-6.dll,但你最好自己检查一下。并记住许可证。

您可以使用Dependency Walker来分析应用程序的依赖关系。

更新(2017-12-12): 我错过了你发布截图的时间。据我所知,问题是您正在尝试运行可执行文件的调试版本:ucrtbased.dll是ucrtbase库的调试版本,并且只能从Visual Studio发行版中获得(我所知道的)。如果要在未安装Visual Studio的计算机上运行应用程序,则应使用应用程序的发行版本。

答案 1 :(得分:1)

为了理解您的问题,您需要了解DLL的概念。 动态链接库(DLL) - 如Microsoft所述:

  

DLL是一个包含可供其使用的代码和数据的库   同时有多个程序。例如,在Windows中   在操作系统中,Comdlg32 DLL执行相关的通用对话框   功能。因此,每个程序都可以使用该功能   包含在此DLL中以实现“打开”对话框。这有帮助   促进代码重用和有效的内存使用。

简而言之,DLL基本上是一堆编译代码,它们在加载(甚至运行时)时链接到您的代码。现在,当然,如果您的系统缺少DLL,您的progrem将无法工作。更糟糕的是,DLL对所使用的编译器很敏感。因此每个DLL可能有多个版本,因此您需要正确的DLL。

现在问题本身,错误信息是最好的开始方式。它们会指导您缺少哪些DLL,以及它们的名称。例如,在您的情况下,“vs * .dll”很可能与Visual C++ runtime redistributable相关。

最后,请注意除了使自己的系统正常工作之外,您还需要另外考虑:每个使用您代码的人都可能遇到完全相同的问题。因此,如果您确实打算与其他人共享.EXE,则需要了解如何指导它们,甚至自动化其安装过程。