王安安的记录 2024-02-23 17:08 采纳率: 20%
浏览 1

(标签-java|关键词-pyd)

加载pyd文件出错


// FileName: Test.java
public class Test {
    static
    {
        System.setProperty("java.library.path", "D:\\Users\\wangxiaofei\\MYPYCHARM\\JniPy\\Test.pyd");

        System.loadLibrary("Test.pyd");
    }
    public native void initModule();

    public native void uninitModule();

    public native String testFunction(String param);

}

"D:\Program Files\Java\jdk17\bin\java.exe" "-javaagent:D:\Program Files\JetBrains\IntelliJ IDEA Community Edition 2023.2.2\lib\idea_rt.jar=62779:D:\Program Files\JetBrains\IntelliJ IDEA Community Edition 2023.2.2\bin" -Dfile.encoding=UTF-8 -classpath D:\Users\AppData\IdeaProjects\demo_callpy\target\classes;D:\maven-jar\net\java\dev\jna\jna\5.9.0\jna-5.9.0.jar;D:\maven-jar\org\python\jython-standalone\2.7.0\jython-standalone-2.7.0.jar;D:\maven-jar\org\springframework\boot\spring-boot-starter-web\3.0.2\spring-boot-starter-web-3.0.2.jar;D:\maven-jar\org\springframework\boot\spring-boot-starter-json\3.0.2\spring-boot-starter-json-3.0.2.jar;D:\maven-jar\com\fasterxml\jackson\core\jackson-databind\2.14.1\jackson-databind-2.14.1.jar;D:\maven-jar\com\fasterxml\jackson\core\jackson-annotations\2.14.1\jackson-annotations-2.14.1.jar;D:\maven-jar\com\fasterxml\jackson\core\jackson-core\2.14.1\jackson-core-2.14.1.jar;D:\maven-jar\com\fasterxml\jackson\datatype\jackson-datatype-jdk8\2.14.1\jackson-datatype-jdk8-2.14.1.jar;D:\maven-jar\com\fasterxml\jackson\datatype\jackson-datatype-jsr310\2.14.1\jackson-datatype-jsr310-2.14.1.jar;D:\maven-jar\com\fasterxml\jackson\module\jackson-module-parameter-names\2.14.1\jackson-module-parameter-names-2.14.1.jar;D:\maven-jar\org\springframework\boot\spring-boot-starter-tomcat\3.0.2\spring-boot-starter-tomcat-3.0.2.jar;D:\maven-jar\org\apache\tomcat\embed\tomcat-embed-core\10.1.5\tomcat-embed-core-10.1.5.jar;D:\maven-jar\org\apache\tomcat\embed\tomcat-embed-el\10.1.5\tomcat-embed-el-10.1.5.jar;D:\maven-jar\org\apache\tomcat\embed\tomcat-embed-websocket\10.1.5\tomcat-embed-websocket-10.1.5.jar;D:\maven-jar\org\springframework\spring-web\6.0.4\spring-web-6.0.4.jar;D:\maven-jar\org\springframework\spring-beans\6.0.4\spring-beans-6.0.4.jar;D:\maven-jar\io\micrometer\micrometer-observation\1.10.3\micrometer-observation-1.10.3.jar;D:\maven-jar\io\micrometer\micrometer-commons\1.10.3\micrometer-commons-1.10.3.jar;D:\maven-jar\org\springframework\spring-webmvc\6.0.4\spring-webmvc-6.0.4.jar;D:\maven-jar\org\springframework\spring-aop\6.0.4\spring-aop-6.0.4.jar;D:\maven-jar\org\springframework\spring-context\6.0.4\spring-context-6.0.4.jar;D:\maven-jar\org\springframework\spring-expression\6.0.4\spring-expression-6.0.4.jar;D:\maven-jar\org\springframework\boot\spring-boot-starter\3.0.2\spring-boot-starter-3.0.2.jar;D:\maven-jar\org\springframework\boot\spring-boot\3.0.2\spring-boot-3.0.2.jar;D:\maven-jar\org\springframework\boot\spring-boot-autoconfigure\3.0.2\spring-boot-autoconfigure-3.0.2.jar;D:\maven-jar\org\springframework\boot\spring-boot-starter-logging\3.0.2\spring-boot-starter-logging-3.0.2.jar;D:\maven-jar\ch\qos\logback\logback-classic\1.4.5\logback-classic-1.4.5.jar;D:\maven-jar\ch\qos\logback\logback-core\1.4.5\logback-core-1.4.5.jar;D:\maven-jar\org\apache\logging\log4j\log4j-to-slf4j\2.19.0\log4j-to-slf4j-2.19.0.jar;D:\maven-jar\org\apache\logging\log4j\log4j-api\2.19.0\log4j-api-2.19.0.jar;D:\maven-jar\org\slf4j\jul-to-slf4j\2.0.6\jul-to-slf4j-2.0.6.jar;D:\maven-jar\jakarta\annotation\jakarta.annotation-api\2.1.1\jakarta.annotation-api-2.1.1.jar;D:\maven-jar\org\springframework\spring-core\6.0.4\spring-core-6.0.4.jar;D:\maven-jar\org\springframework\spring-jcl\6.0.4\spring-jcl-6.0.4.jar;D:\maven-jar\org\yaml\snakeyaml\1.33\snakeyaml-1.33.jar;D:\maven-jar\org\springframework\boot\spring-boot-devtools\3.0.2\spring-boot-devtools-3.0.2.jar;D:\maven-jar\org\slf4j\slf4j-api\2.0.6\slf4j-api-2.0.6.jar com.example.demo.JNITest.Demo
Exception in thread "main" java.lang.UnsatisfiedLinkError: no Test.pyd in java.library.path: D:\Program Files\Java\jdk17\bin;C:\WINDOWS\Sun\Java\bin;C:\WINDOWS\system32;C:\WINDOWS;D:\Program Files (x86)\Tools\node-v14.21.3-win-x64;C:\WINDOWS\system32;C:\WINDOWS;C:\WINDOWS\System32\Wbem;C:\WINDOWS\System32\WindowsPowerShell\v1.0\;C:\WINDOWS\System32\OpenSSH\;D:\Program Files (x86)\MATLAB\runtime\win64;D:\Program Files (x86)\MATLAB\bin;D:\Program Files\MATLAB\R2011a\runtime\win64;D:\Program Files\MATLAB\R2011a\bin;D:\LINGO18\;C:\Program Files (x86)\Microsoft VS Code\bin;C:\Program Files\Azure Data Studio\bin;D:\Users\Python39\;D:\Users\Python39\Scripts\;%QUARTUS_ROOTDIR%\bin;%QUARTUS_ROOTDIR%\win;%QESS_ROOTDIR%\bin;D:\Program Files (x86)\Tools\Maven\Maven\apache-maven-3.8.6\bin;D:\Program Files (x86)\GnuWin32\bin\;D:\Program Files (x86)\mysql-5.7.41-winx64\bin;D:\Program Files (x86)\apache-tomcat-9.0.12\bin;D:\Program Files (x86)\微信web开发者工具\dll;C:\Pro;ram Files\Bandizip\;D:\Program Files (x86)\apache-tomcat-9.0.12\lib;D:\Program Files\Java\jdk17\bin;D:\Program Files (x86)\Scripts\;D:\Program Files (x86)\;C:\Users\wang'xiao'fei\AppData\Local\Microsoft\WindowsApps;D:\Program Files\JetBrains\PyCharm Community Edition 2021.3.1\bin;;D:\Program Files\Java\jdk17\bin;D:\新建文件夹\Microsoft VS Code\bin;C:\Program Files\Azure Data Studio\bin;D:\Program Files (x86)\Tools\Maven\Maven\apache-maven-3.8.6\bin;D:\Program Files (x86)\Tools\node-v14.21.3-win-x64\node_global;D:\Users\Python39;;.
    at java.base/java.lang.ClassLoader.loadLibrary(ClassLoader.java:2429)
    at java.base/java.lang.Runtime.loadLibrary0(Runtime.java:818)
    at java.base/java.lang.System.loadLibrary(System.java:1989)
    at com.example.demo.JNITest.Test.<clinit>(Test.java:9)
    at com.example.demo.JNITest.Demo.main(Demo.java:7)



  • 写回答

2条回答 默认 最新

  • GISer Liu 2024-02-23 17:09
    关注

    该回答引用自GPT-3.5,由博主GISer Liu编写:

    根据报错信息,我们可以看到异常信息是java.lang.UnsatisfiedLinkError: no Test.pyd in java.library.path,这说明在Java的库路径中找不到Test.pyd文件。

    解决这个问题的方法是确保Java能够找到Test.pyd文件。根据Java的文档,java.library.path是用来指定加载本地库的路径。但是,将Test.pyd文件直接放在该路径下是不够的,因为它的完整路径应该是D:\\Users\\wangxiaofei\\MYPYCHARM\\JniPy\\Test.pyd

    解决方案如下:

    1. Test.pyd文件放置在Java能够找到的地方,可以是系统默认的库路径,也可以是通过设置java.library.path指定的路径。

    2. 修改Java代码,指定java.library.pathD:\\Users\\wangxiaofei\\MYPYCHARM\\JniPy\\,确保Java可以找到Test.pyd文件。

    代码修改如下:

    public class Test {
        static {
            System.setProperty("java.library.path", "D:\\Users\\wangxiaofei\\MYPYCHARM\\JniPy\\");
            try {
                Field fieldSysPath = ClassLoader.class.getDeclaredField("sys_paths");
                fieldSysPath.setAccessible(true);
                fieldSysPath.set(null, null);
            } catch (Exception ex) {
                // Handle exception
                ex.printStackTrace();
            }
            System.loadLibrary("Test");
        }
    
        public native void initModule();
        public native void uninitModule();
        public native String testFunction(String param);
    }
    

    这样修改后,Java在加载本地库时会优先在指定的路径下查找,从而解决加载Test.pyd文件出错的问题。

    如果该回答解决了您的问题,请采纳!如果没有,请参考以下方案进行修订

    用户答题指南

    评论

报告相同问题?

问题事件

  • 创建了问题 2月23日

悬赏问题

  • ¥15 Coze智能助手搭建过程中的问题请教
  • ¥15 12864只亮屏 不显示汉字
  • ¥20 三极管1000倍放大电路
  • ¥15 vscode报错如何解决
  • ¥15 前端vue CryptoJS Aes CBC加密后端java解密
  • ¥15 python随机森林对两个excel表格读取,shap报错
  • ¥15 基于STM32心率血氧监测(OLED显示)相关代码运行成功后烧录成功OLED显示屏不显示的原因是什么
  • ¥100 X轴为分离变量(因子变量),如何控制X轴每个分类变量的长度。
  • ¥30 求给定范围的全体素数p的(p-2)/p的连乘积值
  • ¥15 VFP如何使用阿里TTS实现文字转语音?