在OS X Mavericks上安装RODBC / ROracle软件包
我一直在尝试安装一些软件包,如RODBC,ROracle或RGtk2 – 用于拨浪鼓。 我真的很感激,如果有人能帮我解决这个问题,以便我可以使用这些应用程序在一个苹果与小牛和3.1.1 R
RODBC和RGtk2都出现这种错误:
软件包“RGtk2”可作为源软件包使用,但不能作为二进制文件在install.packages中发出警告:软件包“RGtk2”不可用(对于R版本3.1.1)
当我尝试使用type ='source'时,我可以下载或开始下载,但是我得到这种错误信息…
在install.packages中的警告:安装包“RODBC”具有非零退出状态
这个答案将包括在OS X上安装RODBC和ROracle,特别是在Mavericks和更高版本上。
现在这两个软件包都需要从源代码构build(编译)。 这意味着你需要的第一件事就是下载XCode和相关的“命令行工具”,以便你真正拥有一个编译器。 基本上每一个版本的OS X / XCode都改变了你的操作方式,但是如果你开始使用谷歌search,你可能会在这里登陆。
一旦你有这个地方…
RODBC
自OS X 10.9(Mavericks)以来,Apple停止将iODBC SQL头文件与OS X上的R用户习惯于安装的“命令行工具”一起,以便从源代码构buildR包。
所以如果你在这个时候试图从小牛队的源头上构buildRODBC,你应该得到如下错误:
configuration:错误:“找不到ODBC头sql.h和sqlext.h”
要解决这个问题,您需要下载最新版本的iODBC(www.iodbc.org),然后解压缩文件,并将您的标题和库searchpath设置到解压缩包的位置。 如果你不知道如何设置你的searchpath,你可以把头文件(sql.h和sqlext.h)放在/usr/include
目录下, libiodbc.a
文件放在/usr/lib
目录下。
那么你应该可以做到
install.packages("RODBC",type = "source")
没有任何问题。 据推测,这将与另一个主要的开源ODBC项目unixODBC一样好,但我还没有尝试过。
我已经在El Capitantesting了这个(和另一个答案中的自制方法),两者仍然工作。
ROracle
这更复杂。 然而,ROracle可以安装在OS X上(我已经通过El Capitan在Mountain Lion上testing过)。 由于ROracle依赖于Oracle即时客户端,因此没有任何平台可用的二进制文件。 这里有详细的安装说明。
对于OS X,我们需要(大部分)遵循Linux指令。
首先,按照Linuz的说明下载相应的Oracle Instant Client以及SDK。
Linux安装说明提到从RPM安装客户端,将所有东西放在“正确的位置”。 我甚至无法确定是否应用了OS X,所以我只是将客户端解压到我创build的目录中,然后将SDK放入/sdk
目录中。
然后Linux安装说明指导我们为libclntsh.so.11.1创build一个符号链接。 由于这是OS X,所以它实际上叫做libclntsh.dylib.11.1。 所以我们需要cd到我们解压客户端的目录然后运行
ln -s libclntsh.dylib.11.1 libclntsh.dylib
在OS X上,我们设置DYLD_LIBRARY_PATH
,而不是LD_LIBRARY_PATH
:
export DYLD_LIBRARY_PATH=/scratch/instantclient_11_2:$DYLD_LIBRARY_PATH
使用任何适合您机器的path。
我从来没有能够得到ROracle与OCI_LIB
环境variables编译。 相反,我使用了--with-oci-lib
编译器标志选项:
R CMD INSTALL --configure-args='--with-oci-lib=/scratch/instantclient_11_2' ROracle_1.1-11.tar.gz
再次使用任何path和ROracle版本号是适当的。
如果使用tnsnames.ora文件连接到Oracle数据库,则还需要设置TNS_ADMIN环境variables以指向该文件的位置。
最后一个问题:你可能会发现,如果你从命令行(即terminal)启动R,这一切都将起作用。 具体来说,如果从GUI启动RGui.app或RStudio.app,然后尝试运行library(ROracle)
,则会收到一个错误,指出
> library("ROracle") Error in dyn.load(file, DLLpath = DLLpath, ...) : unable to load shared object '/Library/Frameworks/R.framework/Versions/3.1/Resources/library/ROracle/libs/ROracle.so': dlopen(/Library/Frameworks/R.framework/Versions/3.1/Resources/library/ROracle/libs/ROracle.so, 6): Library not loaded: /ade/b/3071542110/oracle/rdbms/lib/libclntsh.dylib.11.1 Referenced from: /Library/Frameworks/R.framework/Versions/3.1/Resources/library/ROracle/libs/ROracle.so Reason: image not found Error: package or namespace load failed for 'ROracle'
即使Sys.getenv("DYLD_LIBRARY_PATH")
忠实地报告了正确的path,也会发生这种情况。
有一段时间,我一起攻击了一个“解决scheme”,在那里我创build了一个在启动时启动RStudio / RGui的shell脚本,并且只需要记住随时启动它们
open -a R.app open -a RStudio.app
这个问题显然与OS X中GUI启动的应用程序如何提供环境variables有关。通常情况下,我最终在StackOverflow上find了解决scheme。 编辑/etc/launchd.conf
文件解决了这个问题,所以即使从Finder启动RStudio / RGui,ROracle也会加载。 尽pipe这里请注意,Yosemite不再支持/etc/launchd.conf
解决scheme。 该答案表明您现在需要设置一个启动plist文件来设置启动时的launchctl
环境。
埃尔卡皮坦更新为ROracle
我现在已经在El Capitan的这个坩埚上面了,它的工作方式如上所述,但只有先禁用系统完整性保护 ! 这样做相当快,通过Google很容易find说明。
唷。
如果你有自制的话,那很容易。 在terminal,使用
brew install unixodbc
在控制台中,使用
install.packages("RODBC",type="source")
希望它会有所帮助
如果您使用MacPorts,请执行以下操作:
sudo port install unixODBC
然后,创build(或,如果存在,编辑)您的主目录中的文件
~/.R/Makevars
其中应包含一行
CFLAGS += -I/opt/local/include
然后,你可以通过安装RODBC
install.packages("RODBC",type="source")
基本上,以上
- 安装必要的库和头文件
- 告诉R在哪里find他们
- 安装RODBC。
你将不得不从源手动构build包。 如果你去RODBC网站,你会注意到这个二进制文件不适用于小牛队。 下载软件包并按照从源代码构build软件包的说明进行操作。 这些是Windows说明,但一般的想法是一样的。 您将需要在特定软件包的构build过程中使用的所有必需的OS软件包。