我试图使用Aspera High Speed API将文件从on加载到。它在Mac中工作得很好,但是当在Ubuntu 18.0.4上运行相同的代码时,它会产生以下错误。
未能从候选libfaspmanager2.so位置加载Aspera动态库: /root/.aspera/cos-aspera/0.1.163682
与受抚养人:
<dependency>
<groupId>com.ibm.cos-aspera</groupId>
<artifactId>cos-aspera-linux-64</artifactId>
<version>0.1.163682</version>
</dependency>请确保在env变量下面设置:
a) export LD_LIBRARY_PATH=/usr/lib/jvm/java-8-openjdk-amd64/jre/lib/amd64/server:/usr/lib/jvm/java-8-openjdk-amd64/jre/lib/amd64
b) export LD_PRELOAD=/usr/lib/jvm/java-8-openjdk-amd64/jre/lib/amd64/libjsig.so使用以下java:
openjdk版本"1.8.0_222“OpenJDK运行时环境(build 1.8.0_222-8u222-b10-1ubuntu1~18.04.1-b10) OpenJDK 64位服务器VM (build 25.222-b10,混合模式)
发布于 2019-10-31 14:19:47
您可以尝试对加载本机lib的java代码进行反编译。(例如使用JAD)。
您可以在: com.ibm.cloud.objectstorage.services.aspera.transfer.AsperaLibraryLoader中找到这一点。
以下是一种方法:
public static void loadLibrary(File extractedPath, List<String> candidates) {
for (String lib : candidates) {
File libPath = new File(extractedPath, lib);
String absPath = libPath.getAbsolutePath();
log.debug("Attempting to load dynamic library: " + absPath);
try {
System.load(absPath);
log.info("Loaded dynamic library: " + absPath);
return;
} catch (UnsatisfiedLinkError e) {
log.debug("Unable to load dynamic library: " + absPath, e);
}
}
throw new RuntimeException("Failed to load Aspera dynamic library from candidates " + candidates + " at location: " + extractedPath);
}您可以尝试复制错误并通过编译获得实际消息:
public class TestLoad { public static void main(String[] args) {
System.load("/root/.aspera/cos-aspera/0.1.163682/libfaspmanager2.so");
}}在windows上,由于缺少libfaspmanager2.so lib的依赖关系,类似的问题。通过将丢失库所在的文件夹添加到路径来修正。
在Linux上,通过以下方式检查依赖项:
ldd /root/.aspera/cos-aspera/0.1.163682/libfaspmanager2.so如果缺少deps,则向LD_LIBRARY_PATH添加文件夹路径。
另一注:
java库配备了Apache:https://commons.apache.org/proper/commons-logging/guide.html。
所以,激活日志,得到更好的想法。
https://stackoverflow.com/questions/57424730
复制相似问题