完全解决 no XXX in java.library.path 实测有效,再三验证

背景

项目中加密插件需要调用JNI的动态连接库dll,windows平台测试完成,部署到linux系统后no XXX in java.library.path异常出现的毫无防备。

平常解决方案

  加载库的system.loadLibaray方法在linux下会将传入的库名前面加上lib,这和linux下so文件的命名有关系

  1. 使用-Djava.library.path=/user/local/bin 指定java.library.path的路径,将so文件放到指定路径下 如: java -Djava.library.path=/usr/local/bin -jar  你的项目.jar
  2. System.getProperty("java.library.path")获取库路径再将so文件放入到输出的路径中的一个
  3. 如果前两个死活还是找不到文件,可以放到  (你的JAVA安装路径){JAVA_HOME}/jre/lib/amd64/ 下面
  4. 出现错误xxx.so 无法打开共享对象,该文件或目录不存在时,vim /etc/profile 最后添加上export LD_LIBRARY_PATH=${LD_LIBRARY_PATH}:/usr/local/bin (冒号后面的路径为so文件存放的路径)

    root用户可以了普通用户还是不行,直接使用ldd xxx.so 发现有一个so文件后面是=> not found ,直接在/etc/ld.so.conf.d/下创建一个xxx.conf 内容为so文件放置的路径 /usr/local/bin 这一样即可,
    使用sudo /sbin/ldconfig ,再使用lld检查,发现not found 没有了。

我的问题

  之前是有听过使用JNI可以将部分代码封装成DLL让别看看不见内部逻辑,但是没有实际操作过,知识的匮乏让我浪费了一上午的时间各种测试,最后研究其底层,百度了一下什么是DLL才发现,原来DLL是windows专用,linux要使用.so文件,随即找负责人要来.so文件。

希望能够帮到你!

posted @ 2022-05-26 15:03  行人~  阅读(9078)  评论(1编辑  收藏  举报