首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >RocksDB制造安装

RocksDB制造安装
EN

Stack Overflow用户
提问于 2014-08-19 21:09:01
回答 3查看 3.6K关注 0票数 3

从(略微)过时的关于pyrocksdb的文档中可以看出:

“如果您不想调用make install导出以下环境变量:”

代码语言:javascript
复制
$ export CPLUS_INCLUDE_PATH=${CPLUS_INCLUDE_PATH}:`pwd`/include
$ export LD_LIBRARY_PATH=${LD_LIBRARY_PATH}:`pwd`
$ export LIBRARY_PATH=${LIBRARY_PATH}:`pwd`

但是RocksDB安装说明似乎没有提到任何类型的install目标!

是否有从源代码安装RocksDB的公认过程?

我的想法是将include目录的内容从rocksdb目录复制到类似于/usr/local/include的位置,并将librocksdb.solibrocksdb.a文件复制到/usr/local/lib中。这是否一个可以接受的方法?

注意:导出环境变量的方法不如我好,因为我在我的主文件夹中的一个目录中构建了rocksdb --我希望有一个更干净的解决方案(请解释一下您想要的)。

EN

回答 3

Stack Overflow用户

回答已采纳

发布于 2014-09-15 22:39:47

RocksDB最近有制造安装。如果您使用的是最新版本,您应该能够在make install中使用RocksDB。

票数 3
EN

Stack Overflow用户

发布于 2014-08-20 18:24:30

当前Makefile中没有install目标。

这打破了编写Makefile的长期惯例(或者几乎所有其他构建系统.);它应该被认为是一个缺陷。

如果不花费大量时间进行分析,我就无法确定,但是安装目标应该是:

代码语言:javascript
复制
prefix=/usr/local
bindir=$(prefix)/bin
# Normally you'd write a macro for this; 'lib' for 32-bit, 'lib64' for 64...
libdir=$(prefix)/lib64
includedir=$(prefix)/include

# Define this to be the directory(s) the headers are installed into.
# This should not include the 'include' element:
#    include/rocksdb/stuff -> rocksdb/stuff
HEADER_DIRS=...

# Define this so all paths are relative to both the $CWD/include directory...
# so include/rocksdb/foo.h -> HEADER_FILES=rocksdb/foo.h
HEADER_FILES=...

.PHONY: install
install: $(TOOLS) $(LIBRARY) $(SHARED) $(MAKEFILES)
     mkdir -p $(DESTDIR)$(bindir)
     mkdir -p $(DESTDIR)$(libdir)
     mkdir -p $(DESTDIR)$(includedir)
     for tool in $(TOOLS); do \
         install -m 755 $$tool $(DESTDIR)$(bindir); \
     done
     # No, libraries should NOT be executable on Linux.
     install -m 644 $(LIBRARY) $(DESTDIR)$(libdir)
     install -m 644 $(SHARED3) $(DESTDIR)$(libdir)
     ln -s $(SHARED3) $(DESTDIR)$(libdir)/$(SHARED2)
     ln -s $(SHARED2) $(DESTDIR)$(libdir)/$(SHARED1)
     for header_dir in $(HEADER_DIRS); do \
         mkdir -p $(DESTDIR)$(includedir)/$$header_dir; \
     done
     for header in $(HEADER_FILES); do \
         install -m 644 include/$$header $(DESTDIR)$(includedir)/$$header; \
     done

然后,只需执行以下操作,就可以将文件安装到/usr/local中:

代码语言:javascript
复制
make install

但是,其参数化程度如此之高的原因是,您可以更改目标文件夹,而不必修改Makefile。例如,要将目标更改为/usr,只需执行以下操作:

代码语言:javascript
复制
make prefix=/usr install

或者,如果您想测试安装过程,而不干扰您的文件系统,您可以这样做:

代码语言:javascript
复制
make DESTDIR=/tmp/rocksdb_install_test prefix=/usr install

这将把文件放入/tmp/rocksdb_install_test/usr,然后您可以检查它们是否在您希望它们位于的位置.当你高兴的时候,你可以做rm -Rf /tmp/rocksdb_install_test来清理。

我使用过的变量对于使用RPM或DEB进行打包非常重要。

票数 3
EN

Stack Overflow用户

发布于 2017-12-21 16:06:10

I使用ubuntu 16.04

代码语言:javascript
复制
DEBUG_LEVEL=0 make shared_lib install-shared

这样,安装就已经在生产模式中生成了。

如果您想节省时间,可以通过传递-jn (在我的例子中是-j4 )来指定进程中使用的处理器数量。

代码语言:javascript
复制
DEBUG_LEVEL=0 make -j4 shared_lib install-shared

在ubuntu的情况下,这就足够了,但是对于ubuntu,您应该指定lib安装的位置。

代码语言:javascript
复制
export LD_LIBRARY_PATH=/usr/local/lib

希望这能有所帮助。肯珀

票数 0
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/25393010

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档