你需要安装 readline 而非仅仅下载它,并使用 CFLAGS 和 LDFLAGS 将 rpy2 指向它。
尝试这种方法。对我来说几乎有效 - 我有同样的问题,只是多了一个 wrinkle,rpy2 似乎链接到系统 R 而不是我的 homedir 安装。
首先,我将 readline 下载到 ~/src/readline-6.2,并使用 ./configure --prefix=$HOME && make && make install 进行安装。(你需要在某个地方安装它,而不仅仅是下载源代码。)
然后,我重新编译了 R:
CPPFLAGS="-I/usr/local/include -I$HOME/include/" \
LDFLAGS="-L/usr/local/lib64 -L/usr/local/lib -L$HOME/lib64 -L$HOME/lib" \
./configure --prefix=$HOME --enable-BLAS-shlib --enable-R-shlib
make
make install
R现在绝对正在使用readline:
$ ldd ~/lib64/R/lib/libR.so | grep readline
libreadline.so.6 => /home/dsutherl/lib/libreadline.so.6 (0x00007f8104207000)
同理,我在家里安装的Python版本也是3.2.3,因为h5py还不支持3.3版本。
CFLAGS="-I/usr/local/include -I$HOME/include/" \
LDFLAGS="-L/usr/local/lib64 -L/usr/local/lib -L$HOME/lib64 -L$HOME/lib" \
./configure --prefix=$HOME
make
make install
再来一遍:
$ ldd ~/lib/python3.2/lib-dynload/readline.cpython-32m.so | grep readline
libreadline.so.6 => /home/dsutherl/lib/libreadline.so.6 (0x00007fbfff5c2000)
然后我下载了rpy2源代码并进行了构建:
CFLAGS="-I/usr/local/include -I$HOME/include/" \
LDFLAGS="-L/usr/local/lib64 -L/usr/local/lib -L$HOME/lib64 -L$HOME/lib" \
python3 setup.py build --r-home $HOME/lib64/R install
这似乎是成功的,使用
ldd
查看
site-packages/rpy2
中的
.so
文件时,链接到了正确的
libreadline
...但是链接到了系统中的
R
,而不是我的
R
,尽管使用了明确的
--r-home
参数。
/path/to/python2.7/site-packages/rpy2/rinterface/_rinterface.so: undefined symbol: Rf_translateCharUTF8
。顺便说一下,我认为你的错误可能是由于Rpy2从$PATH
中查找R,并试图从中推断出R主目录。如果您更新$PATH
以确保它在系统PATH之前看到$HOME/bin/
,那么应该就没问题了。 - Amelio Vazquez-Reina