在Shinyapp.io无法使用RJDBC连接IBM Cloud DB2数据库的问题
看起来你把硬编码的libjvm.dylib路径改成项目目录后遇到了加载问题,我来给你梳理几个最可能的原因和对应的解决办法:
文件权限不足
直接复制到项目目录的libjvm.dylib可能没有足够的权限让R读取执行。你可以打开终端,进入项目目录,执行下面的命令赋予权限:chmod 755 libjvm.dylib这个命令会给文件所有者读、写、执行权限,给组和其他用户读、执行权限,基本能解决权限导致的加载失败。
依赖库缺失
libjvm.dylib不是独立运行的文件,它依赖JDK里的其他系统库。你直接复制单个文件过去,R加载时找不到这些依赖就会报错。可以用otool命令查看它的依赖:otool -L ./libjvm.dylib输出里会列出所有依赖的库路径,你需要把这些依赖文件也复制到项目目录,或者设置
DYLD_LIBRARY_PATH环境变量指向这些依赖所在的原JDK路径,比如:Sys.setenv(DYLD_LIBRARY_PATH="/Library/Java/JavaVirtualMachines/jdk-9.0.4.jdk/Contents/Home/lib/server") dyn.load("./libjvm.dylib")Java版本不匹配
要确保你复制的libjvm.dylib和R中rJava使用的Java版本完全一致。可以在R里执行Sys.getenv("JAVA_HOME")查看当前R绑定的Java环境,对比复制的libjvm.dylib所属的JDK版本,如果不一致,要么切换R的Java环境,要么复制对应版本的libjvm.dylib。路径指向错误
检查你设置的路径是否正确:如果用相对路径,要确认R的工作目录是项目根目录(可以用getwd()查看);如果用绝对路径,要确保路径拼写完全正确。比如正确的相对路径加载代码应该是:# 先确保工作目录是项目目录 setwd("/Users/parthamajumdar/Documents/Solutions/PriceIndex") dyn.load("./libjvm.dylib") library(rJava) library(RJDBC)
另外,更推荐的做法是不要手动加载libjvm.dylib,而是通过设置JAVA_HOME环境变量让rJava自动找到对应的库。你可以在项目的.Rprofile文件里添加以下代码:
Sys.setenv(JAVA_HOME="/Library/Java/JavaVirtualMachines/jdk-9.0.4.jdk/Contents/Home") library(rJava) library(RJDBC)
这样每次启动R时都会自动配置正确的Java环境,避免硬编码路径带来的问题。
内容的提问来源于stack exchange,提问作者Partha

