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

在Clojure中使用Neanderthal时遭遇Intel MKL库错误求助

解决Neanderthal库在Windows 10下rand-normal!和rand-uniform!的MKL错误(错误码-1140)

你遇到的MKL错误码-1140,大概率是本地MKL环境变量配置不完整,或者JVM没正确加载MKL依赖导致的——既然另一台电脑能正常运行,说明代码本身完全没问题,问题就出在本地的环境配置上。下面是一步步的排查和解决方法:

一、彻底检查并修复MKL环境变量

首先得确保MKL的环境变量能被JVM正确识别:

  • 先确认你装的是64位Intel MKL(和Windows 10 64位匹配),并且安装路径里没有中文、空格这类特殊字符(如果有,建议卸载后重新装到纯英文路径下)。
  • 重新执行mklvars intel64.bat:
    找到MKL安装目录里的这个脚本,路径通常是C:\Program Files (x86)\Intel\oneAPI\mkl\latest\env\mklvars.bat(如果是oneAPI版本),或者旧版的C:\Program Files\Intel\MKL\<版本号>\bin\mklvars intel64.bat。一定要用管理员身份打开命令提示符再执行这个脚本,执行完后输入set命令,检查有没有以下关键变量:
    • MKLROOT:指向MKL的根目录
    • PATH:包含MKL的intel64\bin目录
    • INCLUDE:包含MKL的头文件目录
    • LIB:包含MKL的库文件目录
  • 如果脚本执行后变量没生效,手动添加系统环境变量:
    1. 右键「此电脑」→ 属性 → 高级系统设置 → 环境变量
    2. 在系统变量里新增:
      • 变量名:MKLROOT,变量值:你的MKL根目录(比如C:\Program Files (x86)\Intel\oneAPI\mkl\latest)
    3. 编辑PATH系统变量,添加:
      • %MKLROOT%\intel64\bin
      • 如果你装的是oneAPI,还要加C:\Program Files (x86)\Intel\oneAPI\compiler\latest\windows\bin\intel64
    4. 新增INCLUDE系统变量:%MKLROOT%\include
    5. 新增LIB系统变量:%MKLROOT%\lib\intel64
  • 配置完后必须重启所有终端和IDE,环境变量只有重启后才会生效。

二、调整JVM配置,确保加载MKL

你的project.clj用了JDK 12,而Neanderthal对长期支持版JDK(比如8或11)兼容性更好,建议先试试切换JDK版本:

  • 修改project.clj里的:java-cmd路径,换成JDK 8或11的java.exe路径,比如:
    :java-cmd "C:/Program Files/Java/jdk1.8.0_301/bin/java"
    
  • 检查JVM的库路径是否包含MKL的bin目录:在REPL里执行这段代码:
    (System/getProperty "java.library.path")
    
    如果输出里没有MKL的intel64\bin目录,就在project.clj的:jvm-opts里手动指定:
    :jvm-opts ["--add-opens=java.base/jdk.internal.ref=ALL-UNNAMED"
               "-Djava.library.path=C:/Program Files (x86)/Intel/oneAPI/mkl/latest/intel64/bin"]
    
    记得把路径换成你实际的MKL bin目录。

三、固定依赖版本,避免兼容问题

不要用LATEST来指定依赖版本,这很容易引入兼容性问题,换成具体的稳定版:
修改project.clj的:dependencies部分:

:dependencies [[org.clojure/clojure "1.11.1"]
               [uncomplicate/neanderthal "0.42.0"]
               [incanter "1.9.3"]
               [org.clojure/tools.nrepl "0.2.13"]
               [nrepl "1.0.0"]
               [cider/cider-nrepl "0.30.0"]]

然后执行lein deps重新拉取依赖。

四、用最小化代码测试环境

写一个最简单的测试代码,排除其他代码的干扰:

(ns test-mkl
  (:require [uncomplicate.neanderthal.native :refer [fv]]
            [uncomplicate.neanderthal.random :refer [rand-uniform!]]))

(def x (fv 5))
(rand-uniform! x)
(println x)

在配置好环境变量的终端里运行lein run,如果能正常输出随机向量,说明环境已经配置好了。

如果以上步骤都试过还是不行,建议卸载当前的MKL,重新安装Intel oneAPI Base Toolkit(包含最新版MKL),安装时选默认路径,避免任何特殊字符,安装完成后再执行mklvars intel64.bat。

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.05.13 09:04:15