背景
在使用cplex+IntelliJ IDEA某次关闭IDEA后运行程序,报错:
java.lang.UnsatisfiedLinkError: no cplex1251 in java.library.path
Exception in thread “main” java.lang.UnsatisfiedLinkError: ilog.cplex.Cplex.CPXopenCPLEX([I)J
java.library.path must point to the directory containing the CPLEX shared library
说明程序运行时找不到cplex1251,搜索发现cplex1251代表cplex版本号的dll文件,安装目录下确实存在着cplex1251.dll
解决
JVM和cplex不符
stackoverflow有人回答:Are you running a 32-bit Java VM? That will not work with a 64-bit dll, which is something I always get wrong without noticing it. 经过验证,机器的JVM和cplex1251.dll都是64-bit,不存在这个问题。
未添加cplex1251.dll
考虑java.library.path问题,在Java中,
- PATH是个系统环境变量,指定要执行命令的搜索路径。
- classpath指定JVM查找类文件class file的或jar包的目录
Djava.library.path:java.library.path指定JVM查找动态链接库的目录(eg:.dll,.so,*.dylib)是JVM的启动参数
类似于C/C++中的运行时环境变量
如果要让java程序找到共享库就需要在执行java程序的时候指定java.library.pathEclipse的Run/Debug settings设置VM arguments
- intelliJ IDEA中的Run/Debug settings->configuration->VM options设置java.library.path
但是IDEA的改了报乱码,就直接在在File->Project Structure->Libraries->+New Project Library->Native Library Locations 添加需要的dll文件所在目录,work&问题解决。