R包arrow依赖于cpp的libarrow,需安装。如果没有已经装好的libarrow,R包arrow过程中会自己获取并安装。但过程中可能会用到低版本的openssl,报错
arrow.so: undefined symbol: EVP_MD_CTX_destroy
原因是老版本的openSSL会有EVP_MD_CTX_destroy,但新版本的openSSL中,EVP_MD_CTX_destroy改为了EVP_MD_CTX_free。手动安装过程一直使用的更新版的openSSL,不知道为何,安装R包arrow的过程中,它会找到并使用老版本的openSSL。
因此,选择自己从头编译安装libarrow。
- 下载并解压arrow-apache-arrow-18.1.0;
- 进入cpp,建立inbuild, mybuild两目录
- 进入inbuild
- 通过cmake配置,然后编译、安装:
cmake .. \
-DCMAKE_INSTALL_PREFIX=`pwd`/../mybuild \
-DARROW_ACERO="ON" \
-DARROW_COMPUTE="ON" \
-DARROW_CSV="ON" \
-DARROW_DATASET="ON" \
-DARROW_FILESYSTEM="ON" \
-DARROW_JSON="ON" \
-DARROW_MIMALLOC="ON" \
-DARROW_ORC="ON