您当前的位置: 首页 >  Java

柳鲲鹏

暂无认证

  • 0浏览

    0关注

    4642博文

    0收益

  • 0浏览

    0点赞

    0打赏

    0留言

私信
关注
热门博文

全网首发:Linux自带opencv库的JAVA调用失败/java.lang.UnsatisfiedLinkError:libopencv_ml.so.405: 无法打开共享对象文件

柳鲲鹏 发布时间:2022-01-10 16:32:20 ,浏览量:0

  本来以为,修改了rpath之后,问题就解决了。结果依然说库找不到(库在同目录下)。具体来说:

Exception in thread "main" java.lang.UnsatisfiedLinkError: /home/wuxi/eclipse-workspace/FontTest/lib-native/libopencv_java455.so: libopencv_ml.so.405: 无法打开共享对象文件: 没有那个文件或目录
	at java.lang.ClassLoader$NativeLibrary.load(Native Method)
	at java.lang.ClassLoader.loadLibrary0(ClassLoader.java:1934)
	at java.lang.ClassLoader.loadLibrary(ClassLoader.java:1817)
	at java.lang.Runtime.load0(Runtime.java:810)
	at java.lang.System.load(System.java:1088)
	at taishan.OpenCVTest.(OpenCVTest.java:49)

  吾反复实验都不对,就是说找不到。怎么办?干脆吾自己加载吧。别说,错误马上不一样了。考虑到通用性,使用了一个技巧,通过双层双重循环来处理。终于成功。代码如下:

package taishan;

import java.io.File;
import java.util.LinkedList;
import java.util.List;

import org.opencv.core.Core;
import org.opencv.core.CvType;
import org.opencv.core.Mat;


public class OpenCVTest
{
	private final static String NATIVE_DIR="/home/wuxi/eclipse-workspace/FontTest/lib-native";
	
	private final static String LIB_PREFIX       = "libopencv_";
	private final static String LIB_SUFFIX_LINUX = "so";
	private final static String LIB_SUFFIX_MAC   = "dylib";
	
    private static boolean isOpenCVLoaded = false;;

    private static List getOpenCVFiles(final String dirName)
    {
    	if (dirName == null)
    	{
    		return null;
    	}
    	File dir = new File(dirName);
    	if (!dir.exists() || !dir.isDirectory())
    	{
    		return null;
    	}
    	
    	File[] files = dir.listFiles();
    	List fileList = new LinkedList();
    	for (File file : files)
    	{
    		String name = file.getName();
    		if (name.startsWith(LIB_PREFIX) && name.endsWith(LIB_SUFFIX_LINUX))
    		{
    			fileList.add(file);
    		}
    	}
    	return fileList;
    }
    
    private static void loadNativeOpenCV(final String dirName)
    {
    	if (isOpenCVLoaded)
    	{
    		return;
    	}
    	
    	List fileList = getOpenCVFiles(dirName);
    	if (fileList == null || fileList.size() == 0)
    	{
    		return;
    	}
    	
    	while (fileList.size() > 0)
    	{
    		int left = fileList.size();
    		for (int i=0; i            
关注
打赏
1665724893
查看更多评论
0.0753s