开发者社区> 问答> 正文

JNA调用DLL除了JDK的bin目录其它路径都报错?报错

我用JNA调用C实现PDF电子签章,我把所有的DLL文件放到JDK的bin目录下可以正常运行,但改成绝对路径,就报无效内在访问,把该路径设到系统环境变量也是报错,放在system32下也是一样的错误:

Exception in thread "main" java.lang.Error: Invalid memory access
 at com.sun.jna.Native.invokeInt(Native Method)
 at com.sun.jna.Function.invoke(Function.java:383)
 at com.sun.jna.Function.invoke(Function.java:315)
 at com.sun.jna.Library$Handler.invoke(Library.java:212)
 at com.sun.proxy.$Proxy0.SIGNPDF(Unknown Source)
 at com.cqcca.pdf.SignPDF.main(SignPDF.java:22)

 

展开
收起
爱吃鱼的程序员 2020-06-22 14:16:36 795 0
1 条回答
写回答
取消 提交回答
  • https://developer.aliyun.com/profile/5yerqm5bn5yqg?spm=a2c6h.12873639.0.0.6eae304abcjaIB

    写据对路径试试。我这边调用dll的时候,有时候放.java的同级目录,然后直接写动态库名称就会报错,但是是说找不到dll。如果写绝对路径,例如E:\MyDll.dll就没问题。现在我是这样写的,也没问题<divclass="ref">

    引用来自“张贵成”的答案

    <divclass=ref_body>写据对路径试试。我这边调用dll的时候,有时候放.java的同级目录,然后直接写动态库名称就会报错,但是是说找不到dll。如果写绝对路径,例如E:\MyDll.dll就没问题。现在我是这样写的,也没问题刚刚手贱,直接提交了,忘记传图了<imgsrc="http://www.oschina.net/js/ke/plugins/emoticons/images/17.gif"alt=""/><divclass="ref">

    引用来自“张贵成”的答案

    <divclass=ref_body><divclass="ref">

    引用来自“张贵成”的答案

    <divclass=ref_body>写据对路径试试。我这边调用dll的时候,有时候放.java的同级目录,然后直接写动态库名称就会报错,但是是说找不到dll。如果写绝对路径,例如E:\MyDll.dll就没问题。现在我是这样写的,也没问题<divclass="ref">

    引用来自“sw_ust”的答案

    <divclass=ref_body><divclass="ref">

    引用来自“张贵成”的答案

    <divclass=ref_body><divclass="ref">

    引用来自“张贵成”的答案

    <divclass=ref_body>写据对路径试试。我这边调用dll的时候,有时候放.java的同级目录,然后直接写动态库名称就会报错,但是是说找不到dll。如果写绝对路径,例如E:\MyDll.dll就没问题。现在我是这样写的,也没问题

    JNA的路径是基于java.library.path或者系统变量LD_LIBRARY寻找dll或是so库文件,调用之前,你可以看一下文件是否在变量值的路径内。

    <preclass="brush:scala;toolbar:true;auto-links:false;">println(f"#${System.getProperty("java.library.path")}#")

    正常只要dll或者so文件在目录下就可以正确运行。

    另外,注意linux下的so文件命名有一个前缀lib而dll文件是没有的这个区别。







    <divclass="ref">

    引用来自“二的基本算合格”的答案

    <divclass=ref_body>

    JNA的路径是基于java.library.path或者系统变量LD_LIBRARY寻找dll或是so库文件,调用之前,你可以看一下文件是否在变量值的路径内。

    <preclass="brush:scala;toolbar:true;auto-links:false;">println(f"#${System.getProperty("java.library.path")}#")

    正常只要dll或者so文件在目录下就可以正确运行。

    另外,注意linux下的so文件命名有一个前缀lib而dll文件是没有的这个区别。







    JNA出问题的可能性比较小,你的dll库,有没有认真测试过。<divclass="ref">

    引用来自“sw_ust”的答案

    <divclass=ref_body><divclass="ref">

    引用来自“二的基本算合格”的答案

    <divclass=ref_body>

    JNA的路径是基于java.library.path或者系统变量LD_LIBRARY寻找dll或是so库文件,调用之前,你可以看一下文件是否在变量值的路径内。

    <preclass="brush:scala;toolbar:true;auto-links:false;">println(f"#${System.getProperty("java.library.path")}#")

    正常只要dll或者so文件在目录下就可以正确运行。

    另外,注意linux下的so文件命名有一个前缀lib而dll文件是没有的这个区别。







    真头痛<divclass='ref'>

    引用来自“sw_ust”的评论

    <divclass="ref">

    引用来自“张贵成”的答案

    <divclass=ref_body><divclass="ref">

    引用来自“张贵成”的答案

    <divclass=ref_body>写据对路径试试。我这边调用dll的时候,有时候放.java的同级目录,然后直接写动态库名称就会报错,但是是说找不到dll。如果写绝对路径,例如E:\MyDll.dll就没问题。现在我是这样写的,也没问题求解

    2020-06-22 14:16:53
    赞同 展开评论 打赏
问答排行榜
最热
最新

相关电子书

更多
低代码开发师(初级)实战教程 立即下载
冬季实战营第三期:MySQL数据库进阶实战 立即下载
阿里巴巴DevOps 最佳实践手册 立即下载