背景:
在Linux 想运行内嵌了cef 的一个 distribution 程序,在启动后报错如下:
java.lang.UnsatisfiedLinkError: /home/xxx/jcef_build/libjcef.so: libjawt.so: 无法打开共享对象文件: 没有那个文件或目录
之前在interllij可以正常运行,但是发布成单独的可运行程序后就跑不起来,看了自动生成的启动脚本没有问题。
解决思路:
1、执行locate (用于查找符合条件的文档)命令: locate libjawt.so
发现系统下有下面三个地方存在这个文档
2、给系统添加 指定到一个libjawt.so 的路劲到 LD_LIBRARY_PATH
LD_LIBRARY_PATH 是Linux环境变量名,该环境变量主要用于指定查找共享库(动态链接库)时除了默认路径之外的其他路径。
方法一(当前终端有效,最好用第二种)
在终端执行命令:export LD_LIBRARY_PATH=/home/xxxx/xxx/00_soft/jdk/jdk1.8/jre/lib/amd64/
方法二(长久有效)
执行如下命令:cd ~; vi .bashrc
在打开的文件最后添加上下面的配置(注意:具体的扩展路劲需修改为你本地找到的 libjawt.so 路劲):
export LD_LIBRARY_PATH=$LD_LIBRARY_PATH:/home/xxxx/xxx/00_soft/jdk/jdk1.8/jre/lib/amd64/
保存退出
执行命令:source .bashrc 或是重启使其生效
再次启动程序就可以正常找到该文件,并且顺利运行。
问题小思:
问题解决后,对比了build配置的参数 和 run/debug configuration 窗口的参数, 分别如下
build.gradle
run/debug configuration
在run/debug configuration 中的环境变量有指定 LD_LIBRARY_PATH 这个参数,但是在启动脚本中并没没有对这个参数进行配置处理,所有出现了找不到 amd64 文件夹下面的 so 文件的情况,自己对其进行配置修即可解决这个问题。