Начало работы с rockdb на MacOS

avatar
mommomonthewind
3 июня 2016 в 13:54
3429
1
4

Я следовал руководству и сделал:

brew install rocksdb

и я застрял здесь. Что мне делать, чтобы использовать rocksdb?

Я скопировал содержимое этого файла примера и попытался скомпилировать его как с помощью gcc-5 (brew), так и с gcc (clang) в Mac OS, но оба они возвращают ошибку. Я использую Xcode 7.3.1 в Mac OS 10.11.5.

Ошибка:

Undefined symbols for architecture x86_64:
  "_rocksdb_backup_engine_close", referenced from:
      _main in ccNZ2cWh.o
  "_rocksdb_backup_engine_create_new_backup", referenced from:
      _main in ccNZ2cWh.o
  "_rocksdb_backup_engine_open", referenced from:
      _main in ccNZ2cWh.o
  "_rocksdb_backup_engine_restore_db_from_latest_backup", referenced from:
      _main in ccNZ2cWh.o
  "_rocksdb_close", referenced from:
      _main in ccNZ2cWh.o
  "_rocksdb_get", referenced from:
      _main in ccNZ2cWh.o
  "_rocksdb_open", referenced from:
      _main in ccNZ2cWh.o
  "_rocksdb_options_create", referenced from:
      _main in ccNZ2cWh.o
  "_rocksdb_options_destroy", referenced from:
      _main in ccNZ2cWh.o
  "_rocksdb_options_increase_parallelism", referenced from:
      _main in ccNZ2cWh.o
  "_rocksdb_options_optimize_level_style_compaction", referenced from:
      _main in ccNZ2cWh.o
  "_rocksdb_options_set_create_if_missing", referenced from:
      _main in ccNZ2cWh.o
  "_rocksdb_put", referenced from:
      _main in ccNZ2cWh.o
  "_rocksdb_readoptions_create", referenced from:
      _main in ccNZ2cWh.o
  "_rocksdb_readoptions_destroy", referenced from:
      _main in ccNZ2cWh.o
  "_rocksdb_restore_options_create", referenced from:
      _main in ccNZ2cWh.o
  "_rocksdb_restore_options_destroy", referenced from:
      _main in ccNZ2cWh.o
  "_rocksdb_writeoptions_create", referenced from:
      _main in ccNZ2cWh.o
  "_rocksdb_writeoptions_destroy", referenced from:
      _main in ccNZ2cWh.o
ld: symbol(s) not found for architecture x86_64
collect2: error: ld returned 1 exit status

Обновление:

После добавления библиотеки rockdb в заголовок и путь поиска библиотеки в Xcode следующим образом:

xcode screenshot

Я пробовал как на сайте rocksdb

rocksdb::DB* db;
rocksdb::Options options;

и столкнулся с другой проблемой:

DBOptions problem

Источник

Ответы (1)

avatar
Mark Setchell
4 июня 2016 в 10:51
2

Вы должны сообщить компоновщику, где находится библиотека rocksdb и как она называется, чтобы он мог найти символы.

Предполагая, что homebrew установлен rocksdb в /usr/local/Cellar/rocksdb/4.5.1, вы, вероятно, захотите что-то вроде:

gcc-5 -std=c++11 program.c -o program -L /usr/local/Cellar/rocksdb/4.5.1/lib -lrocksdb

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

gcc-5 -std=c++11 program.c -o program -L /usr/local/lib -lrocksdb

Если вы хотите использовать графический интерфейс Xcode (а не командную строку), вам нужно будет следовать по тропе зеленых, желтых, синих, красных вещей в этом посте, но заполнить значения для rocksdb, как указано выше. .

mommomonthewind
6 июня 2016 в 08:03
0

Здравствуйте @mark-setchell, я немного обновил свой вопрос, не могли бы вы взглянуть?

Mark Setchell
6 июня 2016 в 11:14
0

Кажется, вам все еще не хватает «красной» части связанного сообщения - вам все еще нужно -lrocksdb в разделе Other Linker Flags в Xcode.

mommomonthewind
6 июня 2016 в 11:15
0

Здорово. Большое спасибо, Марк, ты спас мой день.