【问题标题】:DllImport can't find dll even though dll is in same folder as executable即使 dll 与可执行文件位于同一文件夹中,DllImport 也找不到 dll
【发布时间】:2012-08-24 21:01:28
【问题描述】:

我正在尝试使用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?供参考,here's the exact DLL I'm trying to load

【问题讨论】:

    标签: .net f# llvm dllimport llvm-fs


    【解决方案1】:

    这个:

    "找不到指定的模块"

    可以指向 LLVM-3.1.dll 所依赖的某个库,而不是 LLVM-3.1.dll 本身。

    【讨论】:

    • 刚刚节省了我几个小时
    • 如果您有 dll 的源代码(一般情况下),请确保使用 /MT 而不是 /MD/MTd 而不是 /MDd 在调试构建的情况下编译它)。这将使用运行时库的静态链接。 docs.microsoft.com/en-us/cpp/build/reference/…
    • 任何提示如何确定某个库? Dependency Walker 只是冻结(
    【解决方案2】:

    当 DLL 或 EXE 无法加载时,Depends.exe 非常方便 - 它显示完整的 EXE/DLL 依赖关系树,突出显示无法加载或丢失的内容。

    【讨论】:

      猜你喜欢
      • 2016-11-24
      • 2015-07-15
      • 1970-01-01
      • 1970-01-01
      • 2020-12-18
      • 1970-01-01
      • 1970-01-01
      相关资源
      最近更新 更多