leveldb-ruby
leveldb-ruby copied to clipboard
Gem install fails on MacOS
Running gem install leveldb-ruby on MacOS (10.15.7) fails with
gem install leveldb-ruby
Building native extensions. This could take a while...
ERROR: Error installing leveldb-ruby:
ERROR: Failed to build gem native extension.
current directory: /Users/studnev/.rvm/gems/ruby-2.6.3/gems/leveldb-ruby-0.15/ext/leveldb
/Users/studnev/.rvm/rubies/ruby-2.6.3/bin/ruby -I /Users/studnev/.rvm/rubies/ruby-2.6.3/lib/ruby/site_ruby/2.6.0 -r ./siteconf20210520-85857-33fmh7.rb extconf.rb
g++ -I. -I./include -fno-builtin-memcmp -DOS_MACOSX -DLEVELDB_PLATFORM_POSIX -O2 -DNDEBUG -fPIC -c db/builder.cc -o db/builder.o
g++ -I. -I./include -fno-builtin-memcmp -DOS_MACOSX -DLEVELDB_PLATFORM_POSIX -O2 -DNDEBUG -fPIC -c db/c.cc -o db/c.o
g++ -I. -I./include -fno-builtin-memcmp -DOS_MACOSX -DLEVELDB_PLATFORM_POSIX -O2 -DNDEBUG -fPIC -c db/db_impl.cc -o db/db_impl.o
g++ -I. -I./include -fno-builtin-memcmp -DOS_MACOSX -DLEVELDB_PLATFORM_POSIX -O2 -DNDEBUG -fPIC -c db/db_iter.cc -o db/db_iter.o
g++ -I. -I./include -fno-builtin-memcmp -DOS_MACOSX -DLEVELDB_PLATFORM_POSIX -O2 -DNDEBUG -fPIC -c db/dbformat.cc -o db/dbformat.o
g++ -I. -I./include -fno-builtin-memcmp -DOS_MACOSX -DLEVELDB_PLATFORM_POSIX -O2 -DNDEBUG -fPIC -c db/filename.cc -o db/filename.o
g++ -I. -I./include -fno-builtin-memcmp -DOS_MACOSX -DLEVELDB_PLATFORM_POSIX -O2 -DNDEBUG -fPIC -c db/log_reader.cc -o db/log_reader.o
g++ -I. -I./include -fno-builtin-memcmp -DOS_MACOSX -DLEVELDB_PLATFORM_POSIX -O2 -DNDEBUG -fPIC -c db/log_writer.cc -o db/log_writer.o
g++ -I. -I./include -fno-builtin-memcmp -DOS_MACOSX -DLEVELDB_PLATFORM_POSIX -O2 -DNDEBUG -fPIC -c db/memtable.cc -o db/memtable.o
g++ -I. -I./include -fno-builtin-memcmp -DOS_MACOSX -DLEVELDB_PLATFORM_POSIX -O2 -DNDEBUG -fPIC -c db/repair.cc -o db/repair.o
g++ -I. -I./include -fno-builtin-memcmp -DOS_MACOSX -DLEVELDB_PLATFORM_POSIX -O2 -DNDEBUG -fPIC -c db/table_cache.cc -o db/table_cache.o
g++ -I. -I./include -fno-builtin-memcmp -DOS_MACOSX -DLEVELDB_PLATFORM_POSIX -O2 -DNDEBUG -fPIC -c db/version_edit.cc -o db/version_edit.o
g++ -I. -I./include -fno-builtin-memcmp -DOS_MACOSX -DLEVELDB_PLATFORM_POSIX -O2 -DNDEBUG -fPIC -c db/version_set.cc -o db/version_set.o
g++ -I. -I./include -fno-builtin-memcmp -DOS_MACOSX -DLEVELDB_PLATFORM_POSIX -O2 -DNDEBUG -fPIC -c db/write_batch.cc -o db/write_batch.o
g++ -I. -I./include -fno-builtin-memcmp -DOS_MACOSX -DLEVELDB_PLATFORM_POSIX -O2 -DNDEBUG -fPIC -c table/block.cc -o table/block.o
g++ -I. -I./include -fno-builtin-memcmp -DOS_MACOSX -DLEVELDB_PLATFORM_POSIX -O2 -DNDEBUG -fPIC -c table/block_builder.cc -o table/block_builder.o
g++ -I. -I./include -fno-builtin-memcmp -DOS_MACOSX -DLEVELDB_PLATFORM_POSIX -O2 -DNDEBUG -fPIC -c table/filter_block.cc -o table/filter_block.o
g++ -I. -I./include -fno-builtin-memcmp -DOS_MACOSX -DLEVELDB_PLATFORM_POSIX -O2 -DNDEBUG -fPIC -c table/format.cc -o table/format.o
g++ -I. -I./include -fno-builtin-memcmp -DOS_MACOSX -DLEVELDB_PLATFORM_POSIX -O2 -DNDEBUG -fPIC -c table/iterator.cc -o table/iterator.o
g++ -I. -I./include -fno-builtin-memcmp -DOS_MACOSX -DLEVELDB_PLATFORM_POSIX -O2 -DNDEBUG -fPIC -c table/merger.cc -o table/merger.o
g++ -I. -I./include -fno-builtin-memcmp -DOS_MACOSX -DLEVELDB_PLATFORM_POSIX -O2 -DNDEBUG -fPIC -c table/table.cc -o table/table.o
g++ -I. -I./include -fno-builtin-memcmp -DOS_MACOSX -DLEVELDB_PLATFORM_POSIX -O2 -DNDEBUG -fPIC -c table/table_builder.cc -o table/table_builder.o
g++ -I. -I./include -fno-builtin-memcmp -DOS_MACOSX -DLEVELDB_PLATFORM_POSIX -O2 -DNDEBUG -fPIC -c table/two_level_iterator.cc -o table/two_level_iterator.o
g++ -I. -I./include -fno-builtin-memcmp -DOS_MACOSX -DLEVELDB_PLATFORM_POSIX -O2 -DNDEBUG -fPIC -c util/arena.cc -o util/arena.o
g++ -I. -I./include -fno-builtin-memcmp -DOS_MACOSX -DLEVELDB_PLATFORM_POSIX -O2 -DNDEBUG -fPIC -c util/bloom.cc -o util/bloom.o
g++ -I. -I./include -fno-builtin-memcmp -DOS_MACOSX -DLEVELDB_PLATFORM_POSIX -O2 -DNDEBUG -fPIC -c util/cache.cc -o util/cache.o
g++ -I. -I./include -fno-builtin-memcmp -DOS_MACOSX -DLEVELDB_PLATFORM_POSIX -O2 -DNDEBUG -fPIC -c util/coding.cc -o util/coding.o
g++ -I. -I./include -fno-builtin-memcmp -DOS_MACOSX -DLEVELDB_PLATFORM_POSIX -O2 -DNDEBUG -fPIC -c util/comparator.cc -o util/comparator.o
g++ -I. -I./include -fno-builtin-memcmp -DOS_MACOSX -DLEVELDB_PLATFORM_POSIX -O2 -DNDEBUG -fPIC -c util/crc32c.cc -o util/crc32c.o
g++ -I. -I./include -fno-builtin-memcmp -DOS_MACOSX -DLEVELDB_PLATFORM_POSIX -O2 -DNDEBUG -fPIC -c util/env.cc -o util/env.o
g++ -I. -I./include -fno-builtin-memcmp -DOS_MACOSX -DLEVELDB_PLATFORM_POSIX -O2 -DNDEBUG -fPIC -c util/env_posix.cc -o util/env_posix.o
g++ -I. -I./include -fno-builtin-memcmp -DOS_MACOSX -DLEVELDB_PLATFORM_POSIX -O2 -DNDEBUG -fPIC -c util/filter_policy.cc -o util/filter_policy.o
g++ -I. -I./include -fno-builtin-memcmp -DOS_MACOSX -DLEVELDB_PLATFORM_POSIX -O2 -DNDEBUG -fPIC -c util/hash.cc -o util/hash.o
g++ -I. -I./include -fno-builtin-memcmp -DOS_MACOSX -DLEVELDB_PLATFORM_POSIX -O2 -DNDEBUG -fPIC -c util/histogram.cc -o util/histogram.o
g++ -I. -I./include -fno-builtin-memcmp -DOS_MACOSX -DLEVELDB_PLATFORM_POSIX -O2 -DNDEBUG -fPIC -c util/logging.cc -o util/logging.o
g++ -I. -I./include -fno-builtin-memcmp -DOS_MACOSX -DLEVELDB_PLATFORM_POSIX -O2 -DNDEBUG -fPIC -c util/options.cc -o util/options.o
g++ -I. -I./include -fno-builtin-memcmp -DOS_MACOSX -DLEVELDB_PLATFORM_POSIX -O2 -DNDEBUG -fPIC -c util/status.cc -o util/status.o
g++ -I. -I./include -fno-builtin-memcmp -DOS_MACOSX -DLEVELDB_PLATFORM_POSIX -O2 -DNDEBUG -fPIC -c port/port_posix.cc -o port/port_posix.o
rm -f libleveldb.a
ar -rs libleveldb.a db/builder.o db/c.o db/db_impl.o db/db_iter.o db/dbformat.o db/filename.o db/log_reader.o db/log_writer.o db/memtable.o db/repair.o db/table_cache.o db/version_edit.o db/version_set.o db/write_batch.o table/block.o table/block_builder.o table/filter_block.o table/format.o table/iterator.o table/merger.o table/table.o table/table_builder.o table/two_level_iterator.o util/arena.o util/bloom.o util/cache.o util/coding.o util/comparator.o util/crc32c.o util/env.o util/env_posix.o util/filter_policy.o util/hash.o util/histogram.o util/logging.o util/options.o util/status.o port/port_posix.o
ar: creating archive libleveldb.a
setting build environment for x86_64-darwin18...
creating Makefile
current directory: /Users/studnev/.rvm/gems/ruby-2.6.3/gems/leveldb-ruby-0.15/ext/leveldb
make "DESTDIR=" clean
current directory: /Users/studnev/.rvm/gems/ruby-2.6.3/gems/leveldb-ruby-0.15/ext/leveldb
make "DESTDIR="
compiling leveldb.cc
In file included from leveldb.cc:4:
In file included from /usr/local/include/leveldb/db.h:12:
In file included from /usr/local/include/leveldb/iterator.h:19:
/usr/local/include/leveldb/slice.h:43:25: warning: defaulted function definitions are a C++11 extension [-Wc++11-extensions]
Slice(const Slice&) = default;
^
/usr/local/include/leveldb/slice.h:44:36: warning: defaulted function definitions are a C++11 extension [-Wc++11-extensions]
Slice& operator=(const Slice&) = default;
^
In file included from leveldb.cc:4:
In file included from /usr/local/include/leveldb/db.h:12:
In file included from /usr/local/include/leveldb/iterator.h:20:
/usr/local/include/leveldb/status.h:27:11: error: expected ';' at end of declaration list
Status() noexcept : state_(nullptr) {}
^
;
/usr/local/include/leveldb/status.h:33:16: warning: rvalue references are a C++11 extension [-Wc++11-extensions]
Status(Status&& rhs) noexcept : state_(rhs.state_) { rhs.state_ = nullptr; }
^
/usr/local/include/leveldb/status.h:33:23: error: expected ';' at end of declaration list
Status(Status&& rhs) noexcept : state_(rhs.state_) { rhs.state_ = nullptr; }
^
;
/usr/local/include/leveldb/status.h:103:16: error: 'Status' is missing exception specification 'throw()'
inline Status::Status(const Status& rhs) {
^
throw()
/usr/local/include/leveldb/status.h:24:22: note: previous declaration is here
class LEVELDB_EXPORT Status {
^
/usr/local/include/leveldb/status.h:115:40: warning: rvalue references are a C++11 extension [-Wc++11-extensions]
inline Status& Status::operator=(Status&& rhs) noexcept {
^
/usr/local/include/leveldb/status.h:115:48: error: expected function body after function declarator
inline Status& Status::operator=(Status&& rhs) noexcept {
^
In file included from leveldb.cc:4:
In file included from /usr/local/include/leveldb/db.h:12:
/usr/local/include/leveldb/iterator.h:28:31: warning: deleted function definitions are a C++11 extension [-Wc++11-extensions]
Iterator(const Iterator&) = delete;
^
/usr/local/include/leveldb/iterator.h:29:42: warning: deleted function definitions are a C++11 extension [-Wc++11-extensions]
Iterator& operator=(const Iterator&) = delete;
^
/usr/local/include/leveldb/iterator.h:80:27: warning: alias declarations are a C++11 extension [-Wc++11-extensions]
using CleanupFunction = void (*)(void* arg1, void* arg2);
^
In file included from leveldb.cc:4:
In file included from /usr/local/include/leveldb/db.h:13:
/usr/local/include/leveldb/options.h:49:26: warning: in-class initialization of non-static data member is a C++11 extension [-Wc++11-extensions]
bool create_if_missing = false;
^
/usr/local/include/leveldb/options.h:52:24: warning: in-class initialization of non-static data member is a C++11 extension [-Wc++11-extensions]
bool error_if_exists = false;
^
/usr/local/include/leveldb/options.h:59:24: warning: in-class initialization of non-static data member is a C++11 extension [-Wc++11-extensions]
bool paranoid_checks = false;
^
/usr/local/include/leveldb/options.h:69:20: warning: in-class initialization of non-static data member is a C++11 extension [-Wc++11-extensions]
Logger* info_log = nullptr;
^
/usr/local/include/leveldb/options.h:82:28: warning: in-class initialization of non-static data member is a C++11 extension [-Wc++11-extensions]
size_t write_buffer_size = 4 * 1024 * 1024;
^
/usr/local/include/leveldb/options.h:87:22: warning: in-class initialization of non-static data member is a C++11 extension [-Wc++11-extensions]
int max_open_files = 1000;
^
/usr/local/include/leveldb/options.h:94:22: warning: in-class initialization of non-static data member is a C++11 extension [-Wc++11-extensions]
Cache* block_cache = nullptr;
^
/usr/local/include/leveldb/options.h:100:21: warning: in-class initialization of non-static data member is a C++11 extension [-Wc++11-extensions]
size_t block_size = 4 * 1024;
^
/usr/local/include/leveldb/options.h:105:30: warning: in-class initialization of non-static data member is a C++11 extension [-Wc++11-extensions]
int block_restart_interval = 16;
^
/usr/local/include/leveldb/options.h:115:24: warning: in-class initialization of non-static data member is a C++11 extension [-Wc++11-extensions]
size_t max_file_size = 2 * 1024 * 1024;
^
/usr/local/include/leveldb/options.h:131:31: warning: in-class initialization of non-static data member is a C++11 extension [-Wc++11-extensions]
CompressionType compression = kSnappyCompression;
^
/usr/local/include/leveldb/options.h:137:19: warning: in-class initialization of non-static data member is a C++11 extension [-Wc++11-extensions]
bool reuse_logs = false;
^
/usr/local/include/leveldb/options.h:142:37: warning: in-class initialization of non-static data member is a C++11 extension [-Wc++11-extensions]
const FilterPolicy* filter_policy = nullptr;
^
/usr/local/include/leveldb/options.h:147:19: warning: defaulted function definitions are a C++11 extension [-Wc++11-extensions]
ReadOptions() = default;
^
/usr/local/include/leveldb/options.h:151:25: warning: in-class initialization of non-static data member is a C++11 extension [-Wc++11-extensions]
bool verify_checksums = false;
^
/usr/local/include/leveldb/options.h:155:19: warning: in-class initialization of non-static data member is a C++11 extension [-Wc++11-extensions]
bool fill_cache = true;
^
/usr/local/include/leveldb/options.h:161:28: warning: in-class initialization of non-static data member is a C++11 extension [-Wc++11-extensions]
const Snapshot* snapshot = nullptr;
^
/usr/local/include/leveldb/options.h:166:20: warning: defaulted function definitions are a C++11 extension [-Wc++11-extensions]
WriteOptions() = default;
^
/usr/local/include/leveldb/options.h:182:13: warning: in-class initialization of non-static data member is a C++11 extension [-Wc++11-extensions]
bool sync = false;
^
In file included from leveldb.cc:4:
/usr/local/include/leveldb/db.h:56:10: warning: defaulted function definitions are a C++11 extension [-Wc++11-extensions]
DB() = default;
^
/usr/local/include/leveldb/db.h:58:19: warning: deleted function definitions are a C++11 extension [-Wc++11-extensions]
DB(const DB&) = delete;
^
/usr/local/include/leveldb/db.h:59:30: warning: deleted function definitions are a C++11 extension [-Wc++11-extensions]
DB& operator=(const DB&) = delete;
^
In file included from leveldb.cc:5:
/usr/local/include/leveldb/cache.h:36:13: warning: defaulted function definitions are a C++11 extension [-Wc++11-extensions]
Cache() = default;
^
/usr/local/include/leveldb/cache.h:38:25: warning: deleted function definitions are a C++11 extension [-Wc++11-extensions]
Cache(const Cache&) = delete;
^
/usr/local/include/leveldb/cache.h:39:36: warning: deleted function definitions are a C++11 extension [-Wc++11-extensions]
Cache& operator=(const Cache&) = delete;
^
In file included from leveldb.cc:7:
/usr/local/include/leveldb/write_batch.h:45:35: warning: defaulted function definitions are a C++11 extension [-Wc++11-extensions]
WriteBatch(const WriteBatch&) = default;
^
/usr/local/include/leveldb/write_batch.h:46:46: warning: defaulted function definitions are a C++11 extension [-Wc++11-extensions]
WriteBatch& operator=(const WriteBatch&) = default;
^
34 warnings and 4 errors generated.
make: *** [leveldb.o] Error 1
make failed, exit code 2
Gem files will remain installed in /Users/studnev/.rvm/gems/ruby-2.6.3/gems/leveldb-ruby-0.15 for inspection.
Results logged to /Users/studnev/.rvm/gems/ruby-2.6.3/extensions/x86_64-darwin-18/2.6.0/leveldb-ruby-0.15/gem_make.out
Hi @astudnev,
I've just faced the same issue here. Sharing that I managed to install the gem by changing the CXXFLAGS flag in my rbconfig.rb file. I use rbenv, so the path for such file here is: /Users/igor/.rbenv/versions/2.7.2/lib/ruby/2.7.0/x86_64-darwin20/rbconfig.rb.
Then I changed the CXXFLAGS line from
CONFIG["CXXFLAGS"] = "-g -O2"
to
CONFIG["CXXFLAGS"] = "-g -O2 -std=c++11"
I hope it helps (if not you, at least other people who will face the issue in the future).
Best, Igor