2013-09-15 3 views
2

Я загрузил последний драйвер MongoDB C++, http://downloads.mongodb.org/cxx-driver/mongodb-linux-x86_64-2.5.2.tgz. Когда я делаю «scons», он строит просто отлично. После того, как здание будет завершена, я получаю следующее:Как установить драйверы MongoDB C++ для Ubuntu?

ranlib build/libmongoclient.a 
Install file: "build/libmongoclient.a" as "libmongoclient.a" 
scons: done building targets. 

Он говорит, что устанавливает Монго, но я хотел бы установить библиотеки, и заголовки в нужном месте, как/USR/местные. Независимо от того, что я пытаюсь (установки scons, с или без --prefix), он просто не хочет устанавливать его в/usr/local. Фактически, в нем говорится, что цель установки обновлена:

$sudo scons install --prefix=/usr/local 
scons: Reading SConscript files ... 
Checking for C++ library boost_thread-mt... (cached) yes 
Checking for C++ library boost_filesystem-mt... (cached) yes 
Checking for C++ library boost_system-mt... (cached) yes 
Checking for sasl_version_info(0, 0, 0, 0, 0, 0) in C library sasl2... (cached) yes 
Checking for C++ header file execinfo.h... (cached) yes 
Checking whether backtrace is declared... (cached) yes 
Checking whether backtrace_symbols is declared... (cached) yes 
Checking whether backtrace_symbols_fd is declared... (cached) yes 
scons: done reading SConscript files. 
scons: Building targets ... 
scons: `install' is up to date. 
scons: done building targets. 

Должен ли я использовать другие параметры для его установки? Для библиотеки я могу просто скопировать ее, но заголовки будут более утомительными для установки вручную.

ответ

3

EDIT: Это сообщение получает много трафика, но описывает, как строить теперь официально для улицы драйвер «Legacy C++». Драйвер Legacy C++ был устаревшим от нового драйвера C++ 11. Новый драйвер C++ 11 должен быть первым выбором при написании клиентского приложения на C++, которое будет связываться с MongoDB. Информация о том, как построить новый драйвер C++ 11 можно посмотреть здесь:

https://github.com/mongodb/mongo-cxx-driver/wiki/Quickstart-Guide-(New-Driver)

EDIT: Пожалуйста, обратите внимание, что этот ответ является устаревшим. Ответ Тайлера ниже - правильный ответ для всех современных пользователей драйвера C++.

Я рекомендую не пытаться использовать tar-файл с драйвером C++ из версии 2.5 (или, в данном случае, в версии 2.4) для создания библиотеки драйверов.

Лучший способ построить драйвер C++ - из полного исходного файла mongodb. Для этого есть несколько причин, но самое главное, что сборка tarball предлагает только очень минимальную систему сборки. Как вы заметили, у него нет «установленных» целей. Другим ограничением является то, что сборка tarball не может создать общий объект, а полные источники могут.

Вот некоторые основные инструкции по построению драйвера C++ из первичных источников MongoDB:

  • клонов источников MongoDB из https://github.com/mongodb/mongo
  • Run scons --prefix=<path-to-install> --full --use-system-all install-mongoclient
  • Если вы хотите разделяемую библиотеку (поддерживается в последней 2.4 и последние 2.5), добавьте --sharedclient в строку выше.
  • Если вы хотите отладочную сборку библиотеки, перейдите либо --dd (2.4), либо --dbg=on (2,5 кончика ствола).

--use-system-all флаг очень важно: использовать его угнетает здание против vendored в версиях таких вещей, как импульс и PCRE, которые приходят с первичными источниками MongoDB. Вы не хотите, чтобы ваша библиотека была создана против этих библиотек, поскольку полученная библиотека не будет подходящей для смешивания с приложениями, созданными против системных версий этих библиотек. Это особенно важно при строительстве с --sharedclient.

Одна проблема с вышесказанным заключается в том, что при построении с --use-system-all система сборки проверяет наличие в системе различных библиотек. Некоторые из этих библиотек, например v8, могут быть недоступны. В 2.4 вы должны либо установить применимую версию библиотеки, либо отредактировать SConstruct для запрета вызовов CheckLib, которые ищут библиотеку. В версии 2.5 это не проблема, так как отсутствующие библиотеки приводят к сбою сборки, если вы пытаетесь создать цель, которая зависит от отсутствующей библиотеки. Поскольку построение клиентского драйвера C++ зависит только от небольшого количества библиотек (например, boost), гораздо проще работать.

Я также рекомендую сначала построить тест --prefix, чтобы убедиться, что действия по установке выполнены так, как вы планируете.

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

+0

Мне удалось создать источники из https://github.com/mongodb/mongo. Как создать тестовый пример кода, например mutable_bson_test.cpp, с mongo/src/mongo/bson/mutable. Он не построен как часть сборки манго. И нет Makefile. – johnsam

+0

@johnsam mutable bson в настоящее время не включен в дистрибутив драйвера, хотя он может быть добавлен в будущую версию. Если вы твердо чувствуете, что это должно быть, напишите дополнительный билль в MongoDB JIRA в рамках проекта CXX. – acm

0

К сожалению, библиотека не устанавливается автоматически. Он скомпилирован, чтобы вы могли распространять библиотеку с вашим приложением. Включение cpp или использование файла tarball не рекомендуется.

Пожалуйста, обратитесь к документации по этой ссылке: http://docs.mongodb.org/ecosystem/tutorial/download-and-compile-cpp-driver/#download-and-compile-cpp-driver

Бест, Чарли

+0

Спасибо, я видел, что клиент/mongo_client_lib.cpp упоминается в документах. Однако, похоже, он больше не находится в источнике. – Amy

+0

Отдельный драйвер C++, похоже, расходится с полным источником монго, благодаря тому, что он указывает на недостаток в документах. Если вы загрузите полный источник mongodb, его можно найти в .../git/mongodb/mongo/src/mongo/client/mongo_client_lib.cpp, однако использование библиотеки является рекомендуемым методом. Мы обновим документы в ближайшем будущем. –

+0

Установить файл: "build/linux2/normal/client_build/libmongoclient.a" как "/usr/local/lib/libmongoclient.a" Должна быть последняя строка полной сборки (сервер и клиент): 'sudo scons - полная установка'. Заголовки также должны быть развернуты в/usr/local/lib/mongo в этот момент. –

5

В настоящее время лучший способ установить драйвер MongoDB C++ - обратиться к официальному github repository и прочитать "Download and Compile" wiki page.

Существует три ветви репозитория (два в настоящее время предлагают стабильный поток выпуска). Первая стабильная серия выпусков называется 26compat (совместимость с MongoDB 2.6), которая имеет исходный код, извлеченный из версии 2.6 MongoDB (наряду с незначительными изменениями, чтобы сделать ее независимой). Он предназначен для замены существующего кода, созданного на основе драйвера C++.

Другая стабильная серия выпусков называется legacy, и она похожа на ветвь 26compat, но содержит некоторые исправления отставания и многие важные улучшения и исправления. Это correct starting point for new projects. Существующие проекты, использующие старый «драйвер сервера» или драйвер 26compat, также должны стремиться к обновлению до стабильной серии версий.

Если вам интересно, вы можете узнать больше об изменениях here, но в целом вам будет лучше использовать то, что мы предоставляем в хранилище github. В то время как драйвер C++ был технически доступен до источника сервера, на самом деле он не предназначался для внешнего использования MongoDB. Теперь код, который мы предоставляем в официальном репозитории , -, предназначенный для использования извне и поддерживаемый командой разработчиков C++.

Мы также работаем над entirely new driver, созданным для C++ 11 на главной ветке, но это еще не готово к производству. Мы рекомендуем вам поэкспериментировать с ним и предоставить обратную связь.

+0

Спасибо за ваш комментарий, драйвер C++ 11 не компилирует Native на Ubuntu 16.04. Кажется, что зависит от библиотеки, которая не выполняется ОС. Вы планируете «обновить» документацию? Это немного грязно со всеми сшивками, а некоторые части отсутствуют. Лучше всего было бы иметь новый lib в стандартной упаковке. Спасибо за некоторую информацию. –

Смежные вопросы