【发布时间】:2019-09-29 15:20:09
【问题描述】:
我尝试在 R 包中使用rocksdb。我使用了以下src/Makevars:
CXX_STD = CXX11
PKG_CPPFLAGS = -I./rocksdb/include/
PKG_LIBS = rocksdb/librocksdb.a -lbz2 -lz -lzstd -llz4 -lsnappy
$(SHLIB): rocksdb/librocksdb.a
rocksdb/librocksdb.a: rocksdb/Makefile
CFLAGS="$(CFLAGS) $(CPICFLAGS)" AR="$(AR)" RANLIB="$(RANLIB)" LDFLAGS="$(LDFLAGS)" \
$(MAKE) -d --jobs=3 --directory=rocksdb static_lib
clean:
$(MAKE) --directory=rocksdb clean
软件包安装失败并出现许多错误(请参阅下面的构建日志)。
您可以使用 Docker 容器重现此案例:
必要的命令:
docker run --rm -ti rocker/r-ver:latest bash
在容器中执行:
apt-get update
# install system deps
apt-get install -y libgflags-dev libsnappy-dev zlib1g-dev libbz2-dev liblz4-dev libzstd-dev
apt-get install -y git-core
# install R deps
install2.r Rcpp checkmate R6 tinytest
cd /tmp
git clone https://gitlab.com/artemklevtsov/rocksdb
cd rocksdb/
git submodule init
git submodule update
R CMD INSTALL .
但是我可以直接在rocksdb源码目录下成功运行make:
cd src/rocksdb/
make static_lib
如何在 R 包安装期间修复 src/Makevars 以构建 rocksdb?
链接:
【问题讨论】:
-
我没有时间详细研究这个,但粗略的笔画看起来是正确的。几个包的作用是将所需静态库的创建 分配给
configure脚本,然后依赖它。其他包有时也只是从src/Makevars调用帮助脚本。现在更多的是关于 R 构建系统的争论......