这是我第一次使用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
在我的电脑上编译。
这是错误的图片:
答案 0 :(得分:3)
对于Visual Studio,您需要安装Visual C++ Redistributable libraries或提供应用程序所需的库.exe文件(我不确定它是否违反许可证)。
对于MinGW,您还需要提供所需的DLL。我想你需要libgcc_s_dw2-1.dll
和libstdc++-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,则需要了解如何指导它们,甚至自动化其安装过程。