RocksDB сделать установку

Из (слегка) устаревшей документации по pyrocksdb говорит:

«Если вы не хотите вызывать make install, экспортируйте следующие переменные среды:»

$ 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 из каталога rockdb куда-нибудь вроде /usr/local/include и скопировать файлы librocksdb.so и librocksdb.a в /usr/local/lib. Это приемлемый метод?

Примечание. Метод экспорта переменных окружения был менее предпочтительным для меня, так как я создал rockdb в каталоге внутри своей домашней папки — я надеюсь на более чистое решение (интерпретируйте это как хотите).


person therealrootuser    schedule 19.08.2014    source источник


Ответы (3)


RocksDB недавно установить. Если вы используете последнюю версию, вы сможете сделать make install в RocksDB.

person keelar    schedule 15.09.2014

В текущем Makefile нет цели install.

Это нарушает давно устоявшиеся соглашения по написанию Makefile (или почти любой другой системы сборки...); это следует считать недостатком.

Не тратя много времени на анализ, я не могу быть уверен, но цель установки должна быть примерно такой:

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, просто выполнив:

make install

Однако причина, по которой он так сильно параметризован, заключается в том, что вы можете изменить папку назначения без необходимости изменять Makefile. Например, чтобы изменить место назначения на /usr, вы просто делаете:

make prefix=/usr install

В качестве альтернативы, если вы хотите протестировать процесс установки, не вмешиваясь в свою файловую систему, вы можете сделать:

make DESTDIR=/tmp/rocksdb_install_test prefix=/usr install

Это поместит файлы в /tmp/rocksdb_install_test/usr, которые вы затем сможете проверить, чтобы увидеть, находятся ли они там, где вы хотите, чтобы они были... когда вы счастливы, вы можете просто выполнить rm -Rf /tmp/rocksdb_install_test для очистки.

Переменные, которые я использовал, необходимы для упаковки с помощью RPM или DEB.

person The Real Edward Cullen    schedule 20.08.2014

Я использую убунту 16.04

DEBUG_LEVEL=0 make shared_lib install-shared

Таким образом, установка уже создается в производственном режиме.

Если вы хотите сэкономить время, вы можете указать количество процессоров, используемых в процессе, передав -j[n], в моем случае -j4

DEBUG_LEVEL=0 make -j4 shared_lib install-shared

В случае с ubuntu этого достаточно, а вот в случае с ubuntu для docker следует указать, куда была установлена ​​либа.

export LD_LIBRARY_PATH=/usr/local/lib

Надеюсь это поможет. Кемпер

person Helmut Kemper    schedule 21.12.2017