系统错误 - “代码无法继续,因为未找到 .dll。”
Posted
技术标签:
【中文标题】系统错误 - “代码无法继续,因为未找到 .dll。”【英文标题】:System error - "the code cannot proceed because .dll was not found." 【发布时间】:2018-06-13 22:58:13 【问题描述】:当我尝试运行我的应用程序时遇到此错误:
我检查了,没有理由我可以看到它无法找到libnlopt-0.dll
。在这里(注意GlassModelCalcualator
是使用libnlopt-0.dll
的DLL),在GlassModelCalcualatorDLL
文件夹中:
在GlassModelCalcualatorDLL
的调试文件夹中:
我有一个不同的程序,它有一个使用GlassModelCalcualator.dll
的控制台,也有这个问题。为了解决这个问题,我不得不将libnlopt-0.dll
放在GlassModelCalcualator
的Debug 文件夹中。
我假设这不是同一个问题,因为您可以清楚地看到libnlopt-0.dll
在GlassModelCalcualator
的调试文件夹中。
有什么想法吗?
【问题讨论】:
您显然是静态链接到 DLL,因此它们需要位于相对于 EXE 文件所在位置的文件夹中,而不是相对于源代码所在的位置。见Dynamic-Link Library Search Order。 您可以使用 sysinternals procmon 来查看 windows 试图加载 dll 的位置 @RemyLebeau 没有 exe 文件,因为我只是在使用 dll 文件 DLLs不能自己运行,需要加载到运行EXE创建的进程中(错误信息是Gsi.exe
,我也看到GmcConsole
)跨度>
@ConnorMote 没有 exe 文件 -- 我清楚地看到 Gsi.exe
正在运行。
【参考方案1】:
在搜索 dll 时,Windows 将遵循分层顺序。
您可以将您的 dll 放在与 exe 相同的目录中,甚至可以放在 Windows 系统文件夹中(前提是您绝对确定要永久保留此 dll,因为没有清理)
https://msdn.microsoft.com/en-us/library/windows/desktop/ms682586(v=vs.85).aspx
【讨论】:
“甚至在 Windows 系统文件夹中”——这绝不是一个好主意 我同意这是个坏主意,但在某些情况下可以做到(在极少数情况下可能有用)。 将非系统文件放在系统文件夹中从不是个好主意。将 DLL 放在您自己的文件夹中。如果您有多个应用程序共享相同的 DLL,则可以将它们放入共享文件夹并在操作系统中注册,以便操作系统知道在哪里可以找到它们。 我已经看到它在一些应用程序的系统文件夹中使用(我们也这样做了)用于特殊用途的专用独立机器。以上是关于系统错误 - “代码无法继续,因为未找到 .dll。”的主要内容,如果未能解决你的问题,请参考以下文章
win10,出现文件系统错误(-805306367),怎么解决?