ROracle 未在 MacOS High Sierra 上加载 Instantclient 库

ROracle not loading Instantclient library on MacOS High Sierra

我已经安装了 Oracle Instant Client 12.1.0.2.0,现在正尝试使用以下命令为 R 安装 ROracle 1.3-1:

R CMD INSTALL --configure-args='--with-oci-lib=/usr/local/oracle/instantclient12 --with-oci-inc=/usr/local/oracle/instantclient12/sdk/include' ROracle_1.3-1.tar.gz

Oracle Instant Client 安装在 /usr/local/oracle/instantclient12

不幸的是,我在 ROracle 安装结束时遇到了以下错误,并且一直很难找出问题所在:

** testing if installed package can be loaded
Error: package or namespace load failed for ‘ROracle’ in dyn.load(file, DLLpath = DLLpath, ...):
 unable to load shared object '/Library/Frameworks/R.framework/Versions/3.4/Resources/library/ROracle/libs/ROracle.so':
  dlopen(/Library/Frameworks/R.framework/Versions/3.4/Resources/library/ROracle/libs/ROracle.so, 6): Library not loaded: @rpath/libclntsh.dylib.12.1
Referenced from: /Library/Frameworks/R.framework/Versions/3.4/Resources/library/ROracle/libs/ROracle.so
  Reason: image not found
Error: loading failed
Execution halted
ERROR: loading failed
* removing ‘/Library/Frameworks/R.framework/Versions/3.4/Resources/library/ROracle’

无论出于何种原因,@rpath/libclntsh.dylib.12.1 无法找到并且正在阻止 ROracle 的完全安装。我曾尝试将 link 放入 ~/lib 和 /usr/lib 中的 libclntsh.dylib.12.1,但 link 均无效。我还尝试使用环境变量 DYLD_FALLBACK_LIBRARY_PATH 和 DYLD_LIBRARY_PATH 指向包含 libclntsh.dylib.12.1 的目录,但这些都不起作用。

我正在使用 MacOS High Sierra (10.13) 和 R 3.4.2。

到目前为止,我发现解决这个问题的唯一方法是在 R 的框架库目录中将 link 到 libclntsh.dylib.12.1。在我的计算机上,R 框架库目录位于 /Library/Frameworks/R.framework/Resources/lib

我的即时客户端安装在 /usr/local/oracle/instantclient12

所以我使用下面的命令来制作文件link:

ln -s /usr/local/oracle/instantclient12/libclntsh.dylib.12.1 /Library/Frameworks/R.framework/Resources/lib/libclntsh.dylib.12.1

这解决了 ROracle 安装问题,我现在可以毫无问题地在 R 中加载 ROracle 库。