[英]java unable to find native libraries on java.library.path
所以我试图在 Mac 上运行一个使用 IBM CPLEX 的非常简单的 java 程序。 该程序可以识别 JAR 文件,但无论我指向哪里似乎都找不到本机实现。
Java程序:
import ilog.cplex.IloCplex;
public class CPLEXTester {
public static void main(String[] args) {
System.out.println(System.getProperty("java.library.path"));
try {
new IloCplex();
}
catch(Exception e) {
e.printStackTrace();
}
}
}
intellij 中的输出:
/Users/bradley/Library/Java/JavaVirtualMachines/openjdk-18.0.1.1/Contents/Home/bin/java -Dvisualvm.id=27090629736541 -javaagent:/Applications/IntelliJ IDEA.app/Contents/lib/idea_rt.jar=63865:/Applications/IntelliJ IDEA.app/Contents/bin -Dfile.encoding=UTF-8 -classpath /Users/bradley/Desktop/code/cplexTester/out/production/cplexTester:/Users/bradley/Desktop/code/adaje/code/lib/java/cplex-12.9.jar CPLEXTester
/Users/bradley/Library/Java/Extensions:/Library/Java/Extensions:/Network/Library/Java/Extensions:/System/Library/Java/Extensions:/usr/lib/java:.
java.lang.UnsatisfiedLinkError: no cplex1290 in java.library.path: /Users/bradley/Library/Java/Extensions:/Library/Java/Extensions:/Network/Library/Java/Extensions:/System/Library/Java/Extensions:/usr/lib/java:.
java.library.path must point to the directory containing the CPLEX shared library
try invoking java with java -Djava.library.path=...
Exception in thread "main" java.lang.UnsatisfiedLinkError: 'long ilog.cplex.Cplex.CPXopenCPLEX(int[])'
at ilog.cplex.Cplex.CPXopenCPLEX(Native Method)
at ilog.cplex.CplexI.init(CplexI.java:7083)
at ilog.cplex.CplexI.<init>(CplexI.java:856)
at ilog.cplex.IloCplex.<init>(IloCplex.java:12042)
at ilog.cplex.IloCplex.<init>(IloCplex.java:12057)
at CPLEXTester.main(CPLEXTester.java:7)
我尝试使用的 CPLEX 本机库位置是 /Library/Java/Extensions。 如下所示,我在目录中有 libcplex1290.jnilib 和 libcplex1290.dylib:
Java 只是不断抛出 UnsatisfiedLinkError(s)。 当我明确尝试在 zsh 中链接并运行以下命令时,我得到相同的输出:
java -Djava.library.path=/Library/Java/Extensions -cp ~/Desktop/code/lib/java/cplex-12.9.jar CPLEXTester.java
另一个有趣的注意事项是,当我尝试加载库时,即:
public class CPLEXTester {
public static void main(String[] args) {
System.load("/Library/Java/Extensions/libcplex1290.jnilib");
}
}
我得到另一个 UnsatisfiedLinkError:
/Users/bradley/Library/Java/JavaVirtualMachines/openjdk-18.0.1.1/Contents/Home/bin/java -Dvisualvm.id=27158373972541 -javaagent:/Applications/IntelliJ IDEA.app/Contents/lib/idea_rt.jar=63876:/Applications/IntelliJ IDEA.app/Contents/bin -Dfile.encoding=UTF-8 -classpath /Users/bradley/Desktop/code/cplexTester/out/production/cplexTester:/Users/bradley/Desktop/code/adaje/code/lib/java/cplex-12.9.jar CPLEXTester
Exception in thread "main" java.lang.UnsatisfiedLinkError: Can't load library: /Library/Java/Extensions/libcplex1290.jnilib
at java.base/java.lang.ClassLoader.loadLibrary(ClassLoader.java:2398)
at java.base/java.lang.Runtime.load0(Runtime.java:785)
at java.base/java.lang.System.load(System.java:1979)
at CPLEXTester.main(CPLEXTester.java:5)
有没有人对如何解决这个问题有任何想法? 先感谢您!
这是我的“关于这台 Mac”:
Java 基本设置:
java -XshowSettings:properties -version
Property settings:
file.encoding = UTF-8
file.separator = /
ftp.nonProxyHosts = local|*.local|169.254/16|*.169.254/16
http.nonProxyHosts = local|*.local|169.254/16|*.169.254/16
java.class.path =
java.class.version = 62.0
java.home = /Users/bradley/Library/Java/JavaVirtualMachines/openjdk-18.0.1.1/Contents/Home
java.io.tmpdir = /var/folders/6w/qsmx4xpn7vs528v_7qvm_k9m0000gq/T/
java.library.path = /Users/bradley/Library/Java/Extensions
/Library/Java/Extensions
/Network/Library/Java/Extensions
/System/Library/Java/Extensions
/usr/lib/java
.
java.runtime.name = OpenJDK Runtime Environment
java.runtime.version = 18.0.1.1+2-6
java.specification.name = Java Platform API Specification
java.specification.vendor = Oracle Corporation
java.specification.version = 18
java.vendor = Oracle Corporation
java.vendor.url = https://java.oracle.com/
java.vendor.url.bug = https://bugreport.java.com/bugreport/
java.version = 18.0.1.1
java.version.date = 2022-04-22
java.vm.compressedOopsMode = Zero based
java.vm.info = mixed mode, sharing
java.vm.name = OpenJDK 64-Bit Server VM
java.vm.specification.name = Java Virtual Machine Specification
java.vm.specification.vendor = Oracle Corporation
java.vm.specification.version = 18
java.vm.vendor = Oracle Corporation
java.vm.version = 18.0.1.1+2-6
jdk.debug = release
line.separator = \n
native.encoding = UTF-8
os.arch = aarch64
os.name = Mac OS X
os.version = 12.4
path.separator = :
socksNonProxyHosts = local|*.local|169.254/16|*.169.254/16
sun.arch.data.model = 64
sun.boot.library.path = /Users/bradley/Library/Java/JavaVirtualMachines/openjdk-18.0.1.1/Contents/Home/lib
sun.cpu.endian = little
sun.io.unicode.encoding = UnicodeBig
sun.java.launcher = SUN_STANDARD
sun.jnu.encoding = UTF-8
sun.management.compiler = HotSpot 64-Bit Tiered Compilers
sun.stderr.encoding = UTF-8
sun.stdout.encoding = UTF-8
user.country = US
user.dir = /Users/bradley
user.home = /Users/bradley
user.language = en
user.name = bradley
openjdk version "18.0.1.1" 2022-04-22
OpenJDK Runtime Environment (build 18.0.1.1+2-6)
OpenJDK 64-Bit Server VM (build 18.0.1.1+2-6, mixed mode, sharing)
看起来您正在 Apple M1 芯片上运行。 我认为 CPLEX 还没有用于该处理器的端口。 鉴于 CPLEX 12.9 于 2019 年发布,并且比 Apple M1 芯片的发布时间早了一年,我很确定 CPLEX 12.9 不会在 M1 上原生运行。
IBM 社区网站的引述说:
我们只支持 Mac 上的英特尔芯片,不支持 M1 arm64 芯片。 因此,要让 CPLEX 在您的机器上工作,您必须通过“arch -x86_64 make”、“arch -x86_64 gcc”...要求它使用模拟 intel 模式。
声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.