libOpenBlas.dll缺失依赖解决办法-程序员宅基地

libopenblas.dll出错起因

由于java web项目需要调用openBlas库来进行运算,就下载了预编译的libopenblas文件进行调用,首先遇到路径出错问题、之后又是dll文件缺失依赖问题,以下是解决的方法 。
附openBlas编译下载:https://sourceforge.net/projects/openblas/files/

1.dll文件缺失依赖,报错:“找不到指定模块”

将下载openBLas的bin目录中的libopenblas.dll文件复制到项目的lib目录中进行调用。注意下载的openBlas的位数要与jdk的位数一致,这里是64位的。

WEB-INF目录结构:
在这里插入图片描述

package com.itl.web;

import com.sun.jna.Library;
import com.sun.jna.Native;

import java.util.Arrays;

public class jna {
    //使用jna调用libopenblas.so或libopenblas.dll动态链接库的接口
    public interface CpuLevel3Interface extends Library {
        CpuLevel3Interface INSTANCE = (CpuLevel3Interface)Native.loadLibrary("libopenblas", CpuLevel3Interface.class);
        void cblas_sgemm(int Order, int TransA, int TransB, int M, int N, int K, float alpha, float[] A, int lda,  float[] B, int ldb, float beta,  float[] C, int ldc);
    }

    public static void main( String[] args )
    {
        System.out.println( "Hello World!" );
        int Order=101;
        int TransA=111;
        int TransB=111;
        int M=4;//A的行数,C的行数
        int N=2;//B的列数,C的列数
        int K=3;//A的列数,B的行数
        float alpha=1;
        float beta=0;
        int lda=K;//A的列
        int ldb=N;//B的列
        int ldc=N;//C的列
        float[] A={1,2,3,4,5,6,7,8,9,8,7,6};
        float[] B={5,4,3,2,1,0};
        float[] C = new float[M*N];
        CpuLevel3Interface.INSTANCE.cblas_sgemm(Order, TransA, TransB, M, N, K, alpha, A, lda, B, ldb, beta, C, ldc);
        System.out.println("-------------A--------------\n"+Arrays.toString(A));
        System.out.println("-------------B--------------\n"+Arrays.toString(B));
        System.out.println("-------------C--------------\n"+Arrays.toString(C));
    }
}

在这里插入图片描述
(测试上方代码还需下载jna的jar包进行调用)
运行上面测试代码,报错:Exception in thread “main” java.lang.UnsatisfiedLinkError: 找不到指定的模块。 网上查找原因,估计为dll文件缺失依赖。

2.下载depends查看dll缺失文件

VC程序的反编译工具:Dependency Walker–Depends.exe可用于查看缺失的dll文件。depends.exe下载链接
打开depends程序,将libopenblas.dll拖入进行查看

在这里插入图片描述
红色方框内显示的就是libopenblas.dll缺失的依赖文件

3.下载缺失依赖

缺失的依赖文件在https://cn.dll-files.com/上下载,下载时注意系统位数一致,所有缺失的文件下载完成后,与libopenblas.dll放在同一文件夹,将文件夹中的libopenblas.dll再次拖入depends.exe进行检测,无报错说明缺失的依赖全部下载完成。

1)所有缺失文件下载,与libopenblas.dll放在同一文件夹(这里文件夹名称为libOpenBlasDll)
在这里插入图片描述

2)再次通过depends测试无误后,无将整个文件夹复制进项目的lib文件夹下
在这里插入图片描述

在这里插入图片描述
3)将libOpenBlasDll文件夹设置为Resourse Root,以便能引用到libopenblas.dll
在这里插入图片描述
4)再次运行测试代码,成功
在这里插入图片描述

版权声明:本文为博主原创文章,遵循 CC 4.0 BY-SA 版权协议,转载请附上原文出处链接和本声明。
本文链接:https://blog.csdn.net/llapton/article/details/103603217

智能推荐

泰克Tektronix DPO2014示波器-程序员宅基地

文章浏览阅读354次,点赞7次,收藏8次。杰出的处理能力,迅速解决问题 - MSO2000和DPO2000系列数字荧光示波器 (DPO)为您查看信号和迅速解决问题提供了所需的性能和工具。DPO2000 系列是少有在所有通道上提供了1M 点可用记录长度、串行触发和解码分析选项、可变低通滤波器、允许直到示波器全部带宽查看信号细节及体积小巧的示波器。-体积小,重量轻,深仅5.3 英寸(134mm),重仅7 磅14 盎司(3.6 公斤)混合信号设计和分析(MSO2000 系列)-能够时间相关最多4 条模拟和16 条数字通道。-并行总线触发和分析。

Android百度地图(三):百度地图画运动轨迹及图层点击事件处理_百度地图polyline和轨迹-程序员宅基地

文章浏览阅读2.1w次,点赞11次,收藏107次。上篇文章讲述了如何在地图显示位置点,这篇文章主要讲述如何在地图上画运动轨迹,以及地图图层点击事件的处理。很多运动类的app都有画出跑步者运动轨迹的需求,拿咕咚来说,我们看一下它的效果图:咕咚运动轨迹图本篇将要实现的效果1.跑步结束后,静态的画出整个运动轨迹2.跑步过程中,时时动态的画运动轨迹效果图如何实现:1._百度地图polyline和轨迹

cocos2d 嵌入网页_在 cocos2d-x 中嵌入浏览器-程序员宅基地

文章浏览阅读656次。在 cocos2d-x 中嵌入浏览器次阅读Embeds a browser in cocos2d-x在游戏中嵌入网页是很常见的需求,cocos2d-x 引擎官方并没有提供这个功能。我在网上转了一圈,把找到的资料做了一些修改,将其集成到我们使用的 quick-cocos2d-x 引擎中。主要代码来自:CCXWebview,这里 还有一篇专门讲解Android嵌入浏览器的文章,可以参考。集成的类叫做 ..._cocos2dx pc 内嵌网页

jsoncpp去掉多余字符_拼凑字符串时,去除末尾多余字符的几个方法-程序员宅基地

文章浏览阅读545次。title: 拼凑字符串时,去除末尾多余字符的几个方法date: 2018-08-17 22:12:58tags: [Java,方法]在拼接字符串的时候,经常会发现多了,不想要的字符,让人很是烦恼,这下面总结三个可以去掉烦恼的方法。//循环生成json格式数据public static String CreateJson() {String json="{\"content\":[";for(in..._json 输入的结尾有多余的字符。”

ROS学习笔记49(写一个简单的图像订阅者(C ++))_sensor_msgs::imageconstptr-程序员宅基地

文章浏览阅读1.8k次,点赞3次,收藏15次。1 程序#include <ros/ros.h>#include <image_transport/image_transport.h>#include <opencv2/highgui/highgui.hpp>#include <cv_bridge/cv_bridge.h>void imageCallback(const senso..._sensor_msgs::imageconstptr

jmeter两种设置中文方法_jmeter设置中文-程序员宅基地

文章浏览阅读1.7w次,点赞14次,收藏42次。jmeter两种设置中文方法、jmeter设置为中文方法、jmeter设置为中文的两种方法、jmeter怎么改中文_jmeter设置中文

随便推点

java对象与json对象间的相互转换的方法_接收{}对象,此处接收数组对象会有异常-程序员宅基地

文章浏览阅读446次。String json=JSON.toJSONString(user);//关键1.简单的解析json字符串首先将json字符串转换为json对象,然后再解析json对象,过程如下。 1 JSONObject jsonObject = JSONObject.fromObject(jsonStr); 根据json中的键得到它的值 1 2 3 4 String name = jsonObject.get._接收{}对象,此处接收数组对象会有异常

【小沐学NLP】Python实现图片文字识别_机器学习如何图片中文字识别的程序-程序员宅基地

文章浏览阅读5.3k次,点赞12次,收藏87次。Tesseract最初由惠普实验室支持,用于电子版文字识别,1996年被移植到Windows上,1998年进行了C++化,在2005年Tesseract由惠普公司宣布开源。2006年到现在,由Google公司维护开发。最初Tesseract是用C语言写的,在1998年改用C++。..._机器学习如何图片中文字识别的程序

stm32 定时器输入捕获实验_stm32使用定时器对脉冲进行捕获和计数-程序员宅基地

文章浏览阅读2k次,点赞4次,收藏24次。输入捕获模式可以用来测量脉冲宽度或者测量频率原理图如图 所示,就是输入捕获测量高电平脉宽的原理,假定定时器工作在向上计数模式,图中 t1~t2 时间,就是我们需要测量的高电平时间。测量方法如下:首先设置定时器通道 x 为上升沿捕获,这样, t1 时刻,就会捕获到当前的 CNT 值,然后立即清零 CNT,并设置通道 x为下降沿捕获,这样到 t2 时刻,又会发生捕获事件,得到此时的 CNT 值,记为 CCRx2。这样,根据定时器的计数频率,我们就可以算出 t1~t2 的时间,从而得到高电平脉宽。_stm32使用定时器对脉冲进行捕获和计数

求二叉树最小结点_c语言非空二叉树最小值结点-程序员宅基地

文章浏览阅读5.7k次,点赞6次,收藏46次。struct BTNode{ int data; struct BTNode *lchild; struct BTNode *rchild;}BTNode * MinNode(BTNode *b){ if (b != NULL){ BTNode *min1, *min2, *min; if (b->lchild == NULL &..._c语言非空二叉树最小值结点

Vue.js初学_vue.js初学者-程序员宅基地

文章浏览阅读8.5k次,点赞63次,收藏392次。Vue.js从零开始1、简单认识Vue.jsVue (读音 /vjuː/,类似于 view) 是一套用于构建用户界面的渐进式框架。与其它大型框架不同的是,Vue 被设计为可以自底向上逐层应用。Vue 的核心库只关注视图层,不仅易于上手,还便于与第三方库或既有项目整合。另一方面,当与现代化的工具链以及各种支持类库结合使用时,Vue 也完全能够为复杂的单页应用提供驱动。2、Vue.js安装CDN引入直接下载然后引入,script方式引用npm方式安装注意开发环境版本(vue.js)和生产环境版_vue.js初学者

html数字跳动加载,【AE】加载动画和数字跳动-程序员宅基地

文章浏览阅读501次。原标题:【AE】加载动画和数字跳动转载一篇晓斌师兄的教程~最近都在研究动效,跟着师兄一起动手吧!转载:吴影浪技 作品:http://www.zcool.com.cn/work/ZMjExNzkxMDQ=.htmlHello,大家好,今天给大家分享一个小案例,就是上面那个图的制作思路,一如既往的,只分享思路,不要在意那些参数。教程分两部分,第一部分是简单说一些AE的工具,方便后面操作(其实是某土豪煤..._数字加载动画

推荐文章

热门文章

相关标签