c++ - 您的计算机错误中缺少 DLL

标签 c++ visual-studio visual-studio-2015

我有一个很棒的项目。

我创建了一个新的和独立的 .dll 项目,其中包含带有一些导出函数的原始项目(复制了原始 .h.cpp 文件到新项目)。我从原始项目复制了所有 lib 依赖项和这些 lib 的路径以及其他包含文件。它的设置相同。

新程序可以编译,但问题是当我尝试运行代码时,出现错误消息:

程序无法启动,因为您的计算机缺少 xxx.dll。尝试重新安装程序以解决此问题。

xxx.libAdditional dependencies 列表中,它不是第一个:

附加依赖项:aaa.lib; bbb.lib; ccc.lib; xxx.lib, zzz.lib

我猜 VS 找到了前三个 .lib 否则我会收到一些错误消息.. 那么为什么它找不到 xxx.lib?同一文件夹中的所有 .lib 文件..

谢谢。

最佳答案

您似乎误读了错误消息。它说:

The program can't start because xxx.dll is missing from your computer. Try reinstalling the program to fix this problem.

请注意,它说缺少 xxx.dll,而不是 xxx.lib!

在 Windows 上,LIB 文件通常用作链接器在使用 DLL 时的辅助工具。 LIB 包含 DLL 提供的函数的导入 stub 。构建二进制文件时需要 LIB 文件;您不需要机器上的 LIB 文件来运行生成的二进制文件。但是,您确实需要 DLL!

这可能令人困惑的原因是,如果您要静态链接目标文件,您只需要 LIB。它包含所有代码,并且不需要 DLL。但这不是您使用的策略。链接器使用 xxx.lib 文件安排 EXE 动态链接到 xxx.dll。因此,EXE 需要 DLL 才能运行。

将 xxx.dll 复制到与您的 EXE 相同的文件夹中,然后再次启动该应用程序。这与您的编译器/链接器/build设置无关。

关于c++ - 您的计算机错误中缺少 DLL,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/40883664/

相关文章:

c++ - 序列点歧义,未定义的行为?

c++ - C++/boost/thread 中可能出现死锁

.net - 自由开发者的软件许可

c++ - C++中的异常被捕获后找出源头?

c++ - QImage::pixel() 没有正确返回透明度

c++ - Save the IP of a domain to a txt file/Save my dynamic ip to a txt file with c++ 或批处理

c# - Windows 应用商店 CurrentApp.LoadListingInformationAsync() - 错误 0x801900cc

tfs - ClickOnce 通过 TFS 和发布管理

c# - VS2015 Enterprise 上下文菜单中没有 'run IntelliTest' 选项

asp.net-web-api - web.config 中使用通配符的 Http 重定向不起作用