Rocky Linux下pip安装rpy2报错:无法找到libffi.a
Rocky Linux下pip安装rpy2因libffi静态库缺失的解决办法
问题背景
已在Rocky Linux系统成功安装R,尝试通过pip install rpy2实现Python调用R时安装失败,核心问题是编译过程中强制寻找不存在的libffi静态库libffi.a,且指定的libffi路径/local/build/libffi/_install/lib64无效,系统仅安装了libffi动态库libffi.so。
报错信息
pip直接安装时的报错:
creating build/temp.linux-x86_64-cpython-310/rpy2/rinterface_lib /external/gcc-11.2.0/bin/gcc -Wno-unused-result -Wsign-compare -DNDEBUG -g -fwrapv -O3 -Wall -fPIC -I~/devel/jupyter_projects/.venv/include -I/external/python/python-3.10.13/include/python3.10 -c rpy2/rinterface_lib/_bufferprotocol.c -o build/temp.linux-x86_64-cpython-310/rpy2/rinterface_lib/_bufferprotocol.o /external/gcc-11.2.0/bin/gcc -shared -L/local/build/libffi/_install/lib64 -l:libffi.a build/temp.linux-x86_64-cpython-310/rpy2/rinterface_lib/_bufferprotocol.o -L/external/python/python-3.10.13/lib -o build/lib.linux-x86_64-cpython-310/rpy2/rinterface_lib/_bufferprotocol.cpython-310-x86_64-linux-gnu.so /usr/bin/ld: cannot find -l:libffi.a collect2: error: ld returned 1 exit status
本地编译rpy2时的报错:
building '_rinterface_cffi_api' extension /external/gcc-11.2.0/bin/gcc -Wno-unused-result -Wsign-compare -DNDEBUG -g -fwrapv -O3 -Wall -fPIC -DRPY2_RLEN_LONG=True -DR_INTERFACE_PTRS=True -Irpy2/rinterface_lib/ -I/local/.venv/include -I/external/python/python-3.10.13/include/python3.10 -c _rinterface_cffi_api.c -o ./_rinterface_cffi_api.o -std=c99 /external/gcc-11.2.0/bin/gcc -shared -L/local/build/libffi/_install/lib64 -l:libffi.a ./_rinterface_cffi_api.o -L/usr/lib64/R/lib -L/external/python/python-3.10.13/lib -lR -ltre -lpcre2-8 -ldeflate -llzma -lbz2 -lz -ltirpc -lrt -ldl -lm -licuuc -licui18n -lflexiblas -o ./_rinterface_cffi_api.cpython-310-x86_64-linux-gnu.so -Wl,--export-dynamic -fopenmp -Wl,-z,relro -Wl,--as-needed -Wl,-z,now -specs=/usr/lib/rpm/redhat/redhat-hardened-ld -specs=/usr/lib/rpm/redhat/redhat-annobin-cc1 -Wl,-rpath,/usr/lib64/R/lib64 /usr/bin/ld: cannot find -l:libffi.a collect2: error: ld returned 1 exit status rpy2/_rinterface_cffi_build.py:301: UserWarning: LinkError: command '/external/gcc-11.2.0/bin/gcc' failed with exit code 1
解决方法
方法1:安装libffi静态库开发包
Rocky Linux中,libffi的静态库包含在libffi-devel包内,执行以下命令安装:sudo dnf install libffi-devel安装完成后重新运行
pip install rpy2即可。方法2:指定动态库路径并强制链接动态库
若无法安装静态库,可通过环境变量指定正确的libffi动态库路径:- 先定位系统中libffi.so的位置:
find /usr -name libffi.so - 设置环境变量并执行安装,将下面的
/usr/lib64替换为实际找到的路径:export LD_LIBRARY_PATH=/usr/lib64:$LD_LIBRARY_PATH export CFLAGS="-L/usr/lib64 -lffi" pip install rpy2
- 先定位系统中libffi.so的位置:
方法3:修改本地编译的链接参数
针对本地编译场景,修改rpy2的编译配置文件:- 打开
rpy2/_rinterface_cffi_build.py文件 - 找到包含
-l:libffi.a的行,替换为-lffi(链接动态库) - 将
-L/local/build/libffi/_install/lib64替换为实际的libffi库路径(如-L/usr/lib64) - 重新执行本地编译安装流程
- 打开
内容的提问来源于stack exchange,提问作者Bentoy13
相关产品推荐
相关产品推荐

