You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

Win10环境下Maya 2024加载ONNXRuntime GPU插件失败求助

Windows 10下Maya C++插件加载ONNXRuntime GPU版的解决方案

针对你遇到的Windows 10环境下,Maya无法从PATH指定路径加载ONNXRuntime GPU版DLL的问题,以下是几个实用的解决办法:

1. 在插件初始化时手动添加DLL搜索路径

Windows 10的DLL搜索机制对PATH的优先级处理和Windows 11有差异,直接在插件代码里主动添加ONNXRuntime的DLL目录,能确保Maya加载时找到文件。在initializePlugin函数开头加入以下代码:

#include <windows.h>

MStatus initializePlugin(MObject obj)
{
    // 替换为你的ONNXRuntime native DLL实际路径
    const wchar_t* onnxRuntimeDir = L"E:\\Projects\\Microsoft.ML.OnnxRuntime.Gpu.1.16.3\\runtimes\\win-x64\\native";
    
    // 使用AddDllDirectory添加路径(不会覆盖原有搜索路径,更安全)
    HMODULE dirHandle = AddDllDirectory(onnxRuntimeDir);
    if (!dirHandle) {
        MGlobal::displayError("Failed to register ONNX Runtime DLL directory");
        return MStatus::kFailure;
    }

    // 插件初始化逻辑...
    MFnPlugin plugin(obj, "Your Plugin Name", "1.0", "Any");
    // 注册命令/节点等...

    return MStatus::kSuccess;
}

2. 启用延迟加载并处理依赖搜索

在Visual Studio项目中设置延迟加载ONNXRuntime的核心DLL,避免Maya启动时直接找不到文件:

  • 右键项目 → 属性 → 链接器 → 输入 → 延迟加载的DLL,添加onnxruntime_gpu.dll
  • 同时在代码中添加延迟加载的错误回调,在找不到DLL时手动指定路径:
#include <delayimp.h>

FARPROC WINAPI delayLoadHook(unsigned int dliNotify, PDelayLoadInfo pdli)
{
    if (dliNotify == dliFailLoadLib) {
        // 检查是否是ONNXRuntime的DLL
        std::wstring dllName(pdli->szDll);
        if (dllName == L"onnxruntime_gpu.dll") {
            const wchar_t* onnxPath = L"E:\\Projects\\Microsoft.ML.OnnxRuntime.Gpu.1.16.3\\runtimes\\win-x64\\native\\onnxruntime_gpu.dll";
            HMODULE hMod = LoadLibraryW(onnxPath);
            if (hMod) {
                return (FARPROC)hMod;
            }
        }
    }
    return NULL;
}

// 注册延迟加载钩子
#pragma comment(linker, "/DELAYLOAD:onnxruntime_gpu.dll")
#pragma comment(lib, "delayimp.lib")
PfnDliHook __pfnDliNotifyHook2 = delayLoadHook;

3. 通过Maya启动脚本前置设置PATH

在Maya的启动脚本中提前修改PATH,确保插件加载前ONNXRuntime的路径已被加入:

  1. 找到Maya的用户脚本目录(比如C:\Users\你的用户名\Documents\maya\202X\scripts)
  2. 创建或编辑userSetup.mel,添加以下代码:
string $onnxDllPath = "E:/Projects/Microsoft.ML.OnnxRuntime.Gpu.1.16.3/runtimes/win-x64/native";
// 把ONNXRuntime路径加到PATH最前面,确保优先级最高
system("set PATH=" + $onnxDllPath + ";%PATH%");

4. 检查ONNXRuntime的依赖DLL

ONNXRuntime GPU版依赖CUDA、CUDNN等组件的DLL,Windows 10可能缺少这些依赖的默认路径:

  • 用Dependency Walker工具打开onnxruntime_gpu.dll,查看是否有红色标记的缺失DLL
  • 将缺失依赖的所在目录也添加到PATH,或者复制到ONNXRuntime的DLL目录中

补充说明

Windows 11能正常加载是因为系统对DLL搜索路径的管理做了优化,默认会优先识别用户添加的PATH条目,而Windows 10的PATH优先级更偏向系统目录和Maya自身的bin目录,导致外部路径的DLL无法被优先找到。

内容的提问来源于stack exchange,提问作者hcFZ5y7

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.06.29 03:37:35