MacOS下SCIP 8.x.x结合JNI与Or-Tools使用遇链接错误求助
MacOS下SCIP 8.x.x结合Or-Tools JNI使用报错排查
操作步骤回顾
- 编译安装SCIP 8.0.4:
mkdir build cd build cmake .. -DAUTOBUILD=on make make install
- 验证共享库生成:
➜ ls /usr/local/lib/libscip.dylib /usr/local/lib/libscip.dylib
- 编写的Java代码片段:
System.loadLibrary("scip"); // 验证共享库可访问 MPSolver mpSolver = MPSolver.createSolver("SCIP");
- 运行时错误:
Exception in thread "main" java.lang.UnsatisfiedLinkError: 'long com.google.ortools.linearsolver.mainJNI.MPSolver_createSolver(java.lang.String)' at com.google.ortools.linearsolver.mainJNI.MPSolver_createSolver(Native Method) at com.google.ortools.linearsolver.MPSolver.createSolver(MPSolver.java:140) at org.example.Solver.solve(Solver.java:58) at org.example.Solver.main(Solver.java:24)
解决方案
1. 重新编译SCIP,启用Or-Tools支持
默认编译参数可能未开启Or-Tools相关绑定,重新编译时添加对应参数:
# 清理原有编译文件 rm -rf build mkdir build && cd build # 启用动态库、自动构建及Or-Tools支持 cmake .. -DAUTOBUILD=on -DSHARED=on -DOR_TOOLS=on make make install
2. 指定Java库搜索路径
MacOS下/usr/local/lib可能不在Java默认的库搜索路径中,运行程序时需显式指定:
java -Djava.library.path=/usr/local/lib -jar 你的应用jar包名.jar
如果使用IDE开发,需在VM选项中添加:
-Djava.library.path=/usr/local/lib
3. 确认Or-Tools版本兼容性
确保使用的Or-Tools版本与SCIP 8.0.4兼容(建议使用Or-Tools 9.0及以上版本),避免版本不匹配导致的JNI接口差异。
4. 检查库加载顺序
确保System.loadLibrary("scip")语句在MPSolver.createSolver之前执行,且库名拼写正确(无需添加lib前缀,Java会自动处理不同系统的库命名规则)。
内容的提问来源于stack exchange,提问作者Roman Makhlin
相关产品推荐
相关产品推荐

