• 错误:Unable to load library 'xxx': Native library (win32-x86/xxx.dll) not found in resource p


    本人菜鸟一枚,近日在编写公司代码时用到Java整合C的项目,需要使用JNA对C进行底层调用,但是在进行中出现了问题。

    起初我用的是64位jdk,在运行时报错:1% 不是有效的Win32应用程序,

    后来经过百度,将64位jdk换成了32位的,该错误消失,但是变成了

    Exception in thread "main" java.lang.UnsatisfiedLinkError: Unable to load library 'watermark': Native library (win32-x86/watermark.dll) not found in resource path ([file:/G:/Java-EE%20Workspace/eid-server-watermark_1/target/classes/])


    比较奇怪的是我的dll文件(该文件放在了source目录下了)编译之后成功出现在了target/classes目录下,并且我调用的是Win32-x86-64,理论上应该用的就是64位的jdk。另外我师傅运行这段代码在64位的jdk下没问题!!!

    主函数代码如下:

    public static void main(String[] args) {
        	//执行嵌入
          String em_msg = "jjrt";
    		int result = Watermark.INSTANCE.watermark_embed("d://watermark_.png", 
    				"d://watermark_.png", "d://logo.png", em_msg, em_msg.length());
    		System.out.println(result);
    	}

    接口代码如下:

    public interface Watermark extends Library {
    	
    	Watermark INSTANCE = (Watermark) Native.loadLibrary("watermark", Watermark.class);	
    	/**
    	 * 嵌入水印.
    	 * 
    	 * <p>
    	 * 注意事项:请检查输入输出路径是否存在,是否可写可读。请检查输入路径对应文件是否存在
    	 * 调用前请自行分配字节串数组内存空间,请保证输入数组长度与实际数组长度一致 载体图像为RGB彩色图像(BMP、PNG),
    	 * 颜色空间位深8bit logo图像为二值图像(PNG)
    	 * </p>
    	 * 
    	 * @param output_imgfile_path 水印图像输出路径
    	 * @param input_imgfile_path 载体图像输入路径
    	 * @param input_logo_path logo图像输入路径
    	 * @param msg 字节串数组首地址
    	 * @param num_msg_bit 字节串数组长度
    	 * 
    	 * @return int
    	 */
    	int watermark_embed(String output_imgfile_path, String input_imgfile_path,
    			String input_logo_path, String msg, int num_msg_bit);
    	
    	/**
    	 * 提取水印.
    	 * 
    	 * 注意事项: 含水印图像为RGB彩色图像(BMP、PNG),颜色空间位深8bit 其余同嵌入函数注意事项
    	 * 
    	 * @param input_imgfile_path 水印图像输入路径
    	 * @param output_logo_path logo图像输出路径
    	 * @param logo_height 提取水印图像的高度
    	 * @param logo_width 提取水印图像的宽度
    	 * @param num_msg_bit 字节串数组长度
    	 * @param msg 字节串数组首地址
    	 * 
    	 * @return int
    	 */
    	int watermark_extract(String input_imgfile_path, String output_logo_path,
    			int logo_height, int logo_width, int num_msg_bit, byte[] msg);
    }

    解决方案暂时还没找到,我先把这个错误记录下来

  • 相关阅读:
    存储过程中执行动态Sql语句
    SqlServer新建视图
    DataGridView DataGridViewCheckBoxColumn编辑时实时触发事件
    oracle number 和sqlserver numeric的区别
    放下你的无效社交
    一个程序员眼中的北京和上海
    10+年程序员总结的20+条经验教训
    SQL collate
    SQL自定义函数split分隔字符串
    C# .NET开发Oracle数据库应用程序
  • 原文地址:https://www.cnblogs.com/gwd1154978352/p/6831925.html
Copyright © 2020-2023  润新知