Java工具NGS定量分析时UnsatisfiedLinkError问题求助
NGS定量分析时UnsatisfiedLinkError问题排查与解决
在使用Java工具NGS进行定量分析过程中,程序抛出java.lang.UnsatisfiedLinkError错误,具体信息为:com.strandgenomics.cube.framework.ani.SharedProgressMonitorModel.createNativeSharedObject()J。已尝试在IntelliJ的VM选项中添加-Djava.library.path指定ani库路径,但问题仍未解决。
完整错误堆栈
Caused by: java.lang.UnsatisfiedLinkError: com.strandgenomics.cube.framework.ani.SharedProgressMonitorModel.createNativeSharedObject()J at com.strandgenomics.cube.framework.ani.SharedProgressMonitorModel.createNativeSharedObject(Native Method) ~[rep/:na] at com.strandgenomics.cube.framework.sharedobject.SharedObject.<init>(SharedObject.java:17) ~[rep/:na] at com.strandgenomics.cube.framework.ani.SharedProgressMonitorModel.<init>(SharedProgressMonitorModel.java:27) ~[rep/:na] at com.strandgenomics.cube.framework.ani.NativeAlgorithm.execute(NativeAlgorithm.java:22) ~[rep/:na] at com.strandgenomics.spring.stat.QuantileNormAlgorithm.execute(QuantileNormAlgorithm.java:39) ~[spring-stat-3.9.jar:na] at com.strandgenomics.spring.stat.NormalizationAlgorithm.execute(NormalizationAlgorithm.java:30) ~[spring-stat-3.9.jar:na] at com.strandgenomics.ngs.rnaseq.mrna.expression.QuantileNormalizeWithMV.normalize(QuantileNormalizeWithMV.java:53) ~[rep/:na] at com.strandgenomics.ngs.rnaseq.mrna.expression.QuantileNormalizeWithMV.getNormalizedDataset(QuantileNormalizeWithMV.java:35) ~[rep/:na] at com.strandgenomics.ngs.rnaseq.mrna.expression.NormalizeAndBaseline.<init>(NormalizeAndBaseline.java:69) ~[rep/:na] at com.strandgenomics.ngs.rnaseq.mrna.expression.GeneQuantificationOperations.createNormalizedDataset(GeneQuantificationOperations.java:203) ~[rep/:na] at com.strandgenomics.ngs.rnaseq.smallrna.quantification.SmallRNAQuantification.getNormalizedDatasets(SmallRNAQuantification.java:239) ~[rep/:na] at com.strandgenomics.ngs.rnaseq.smallrna.quantification.SmallRNAQuantification.getSmallRNAQuantificationNode(SmallRNAQuantification.java:213) ~[rep/:na] at com.strandgenomics.ngs.rnaseq.smallrna.quantification.SmallRNAQuantification.run(SmallRNAQuantification.java:158) ~[rep/:na] at com.strandgenomics.ngs.rnaseq.smallrna.quantification.SmallRNAQuantificationJob.doRun(SmallRNAQuantificationJob.java:117) ~[rep/:na] at com.strandgenomics.cube.pipeline.job.AbstractJob.run(AbstractJob.java:466) ~[cube-pipeline-2.1.jar:na] ... 6 common frames omitted 16-04-24 11:06:35.619 [pool-25-thread-1] [VitalStatsMonitor] INFO VITAL_STATS PROCESS cpu-load=0.02, free-mem=15.08GB, #threads=29, #classes=12786 16-04-24 11:06:35.620 [pool-25-thread-1] [VitalStatsMonitor] INFO VITAL_STATS SYSTEM cpu-load=8.29, #open-fd=575, free-swap=1.74GB, total-swap=2.00GB 16-04-24 11:06:35.620 [pool-25-thread-1] [VitalStatsMonitor] INFO VITAL_STATS DISK free-space=252.60GB 16-04-24 11:06:35.620 [pool-25-thread-1] [ROOT] INFO MST: } Finish: Job: Failed: Run Quantification 16-04-24 11:06:35.620 [pool-25-thread-1] [SmallRNAQuantificationJob] INFO ---------------------------- Finished executing job ---------------------------- 16-04-24 11:06:35.620 [pool-25-thread-1] [SmallRNAQuantificationJob] INFO Job ID = =1713242315827=JAVA=1406318141 16-04-24 11:06:35.620 [pool-25-thread-1] [SmallRNAQuantificationJob] INFO Job Name = Run Quantification 16-04-24 11:06:35.620 [pool-25-thread-1] [SmallRNAQuantificationJob] INFO Job Type = Analysis
当前VM配置
-DorderID=FLOATING_LICENSE -Djavavm=../../../pkg/tools/jdk/1.8.0/jre -Djava.library.path=../../../pkg/tools/java/1.8/lib -DproductVersion=2.0 -DproductName=NGS -Dtmp.dir=app/tmp -Ddata.dir=app/Data
解决方案
- 确认库路径有效性:检查
-Djava.library.path指向的目录是否存在对应的native库(如Linux下的libani.so、Windows下的ani.dll、macOS下的libani.jnilib)。注意相对路径是程序启动目录的相对路径,而非IntelliJ安装目录,建议替换为绝对路径测试。 - 校验架构匹配:确保native库与JDK的架构一致(32位/64位),若JDK是64位,native库也必须为64位版本,否则会加载失败。
- 检查库依赖:使用系统工具检测native库的依赖是否完整:
- Linux:
ldd libani.so - Windows:Dependency Walker工具
- macOS:
otool -L libani.jnilib
确保所有依赖的系统库都能被系统找到。
- Linux:
- 确认VM参数生效时机:
-Djava.library.path必须在JVM启动时设置,在IntelliJ中需将参数添加到运行配置的VM参数栏,而非其他配置项。 - 手动加载库调试:在代码中
NativeAlgorithm初始化前,显式调用System.loadLibrary("ani")或System.load("/绝对路径/libani.so"),捕获UnsatisfiedLinkError以获取更详细的加载失败原因。 - 核对官方文档:查看NGS工具对应版本的官方文档,确认JDK版本要求、native库配置步骤是否有遗漏。
内容的提问来源于stack exchange,提问作者anurag jaiswal
相关产品推荐
相关产品推荐

