DllImport找不到dll文件,尽管dll文件与可执行文件在同一个文件夹中。

13

我正在尝试使用llvm-fs项目,该项目为F#提供了llvm绑定。我已经使用--enable-shared编译了LLVM-3.1.dll文件,并将其放置在与我的可执行文件相同的目录中(我使用Environment.CurrentDirectory进行了检查)。llvm-fs中的DllImport如下:

[<DllImport(
    "LLVM-3.1.dll",
    EntryPoint="LLVMModuleCreateWithName",
    CallingConvention=CallingConvention.Cdecl,
    CharSet=CharSet.Ansi)>]
extern void* (* LLVMModuleRef *) moduleCreateWithNameNative(string ModuleID)

但是当我运行我的应用程序时,它会出现错误:

Unable to load DLL 'LLVM-3.1.dll': The specified module could not be found.
(Exception from HRESULT: 0x8007007E)

我该如何加载DLL?参考这里是我正在尝试加载的确切DLL

2个回答

22

这个错误信息:

"指定的模块找不到"

可能是指某个库文件,它与 LLVM-3.1.dll 有依赖关系,而不是 LLVM-3.1.dll 本身出现了问题。


刚刚节省了我好几个小时。 - Anatoly Vasilyev
如果您有dll的源代码(一般情况下),请确保使用/MT而不是/MD进行编译(在调试构建的情况下,请使用/MTd而不是/MDd)。 这将使用运行时库的静态链接。https://learn.microsoft.com/en-us/cpp/build/reference/md-mt-ld-use-run-time-library?view=vs-2019 - Nenad
有什么提示可以精确定位某个库吗?Dependency Walker会卡住。 - Dfr

12
当DLL或EXE加载失败时,像这种情况下,Depends.exe非常方便-它显示完整的EXE / DLL依赖树,突出显示无法加载或丢失的内容。

网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接