【问题标题】:junit4 test native methodjunit4 测试原生方法
【发布时间】:2014-10-29 13:45:17
【问题描述】:

我使用 jni 调用 .so(共享库)。

在执行环境中一切正常。

但我想对它们添加一些单元测试。

我有一个依赖于 libUtil_Cade.so 的 libCBareme.so

我使用带有surefire插件的maven2.2.1,并在pom.xml文件中添加:

 <configuration>
             <forkMode>once</forkMode>
             <workingDirectory>target</workingDirectory>
             <argLine>-Djava.library.path=${project.basedir}/src/test/resources/om_lib/</argLine>
 </configuration>

我添加了 System.out.println(System.getProperty("java.library.path"));并且路径没问题,您可以在下一个日志中看到。

但是当我启动测试时,我得到:

TrtBaremeTest  Time elapsed: 3.032 sec  <<< ERROR!
java.lang.UnsatisfiedLinkError: /data/tmp/pam/workspace/CTR_SCA/OutilsMetier/src/test/resources/om_lib/libCBareme.so: libUtil_CADE.so: cannot open shared object file: No such file or directory

在这个目录中我有

ls /data/tmp/pam/workspace/CTR_SCA/OutilsMetier/src/test/resources/om_lib/*.so /data/tmp/pam/workspace/CTR_SCA/OutilsMetier/src/test/resources/om_lib/libCBareme.so /data/tmp/pam/workspace/CTR_SCA/OutilsMetier/src/test/resources/om_lib/libUtil_CADE.so

为什么我的单元测试说cannot open shared object file

我不会在 %JAVA_HOME%\bin 中添加 .so,因为它是单元测试,所以我不想依赖于平台。

有人有办法解决这个问题吗?

非常感谢

【问题讨论】:

    标签: java-native-interface native java.library.path


    【解决方案1】:

    我只是试试这个:

         <configuration>
               <forkMode>once</forkMode>
               <workingDirectory>target</workingDirectory>
               <environmentVariables>
                   <LD_LIBRARY_PATH>${project.basedir}/src/test/resources/om_lib/</LD_LIBRARY_PATH>
                </environmentVariables>
         </configuration>
    

    它似乎有效!

    但在 Windows 上它不起作用,我看到我需要用 PATH 替换 LD_LIBRARY_PATH,如下所示:

      <configuration>
               <forkMode>once</forkMode>
               <workingDirectory>target</workingDirectory>
               <environmentVariables>
                   <PATH>${project.basedir}/src/test/resources/om_lib/</PATH>
                </environmentVariables>
         </configuration>
    

    在调试模式下,我看到了 设置环境变量 [PATH]=[d:\MarcoPolo\SVN\CASTOR_trunk\CTR_SCA\OutilsMetier..\OM_LIB_DLL]

    但是我放了一个 system.out.println 来查看我的 java.library.path 并且我的路径没有像在 linux 下那样添加 :(

    有人发现了这个问题吗?

    如果有帮助,我将其发布为答案

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 2011-01-20
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      相关资源
      最近更新 更多