2015-07-24 5 views
0

Официально documentation, кажется, не хватает пошаговых инструкций по установке и использованию драйвера C++. Это thread и ответ кажется более перспективным. Но все же я не уверен, что я делаю неправильно, потому что не могу $ locate client/dbclient.h в Ubuntu, как если бы драйвер mongo не был установлен. Итак, это то, что я сделал:Как установить и использовать драйвер mongodb C++ в Ubuntu?

  1. Dowloaded водитель на этом link -ok
  2. распаковали архив - ок
  3. установлен scons как так $ sudo apt-get install scons
  4. ли $ scons, а затем
  5. Судо $ scons install
  6. открыл /etc/ld.so.conf файл и добавлен /usr/local/lib

После всех этих шагов я до сих пор не могу найти client/dbclient.h в моей системе. Кажется, я что-то пропустил. Кроме того, когда я выхожу на сцену, когда библиотека устанавливается, я хочу прочитать ядро ​​библиотеки, потому что в крошечных учебниках в Интернете я не могу найти все, что я хочу (я думаю, из-за отсутствия полноценных учебников аналогично Python). Итак, можете ли вы также, пожалуйста, сообщить, какие файлы библиотек я должен изучить, чтобы узнать api функций, которые я буду использовать?

EDIT

И это официальная link кажется устаревшим, поскольку $ scons --full install приводит к сообщению об ошибке No such option: --full. Отсутствие учебников, устаревшая документация и довольно крутая кривая обучения, IMHO, делают использование C++ довольно проблематичным.

EDIT

Ну, похоже, этого doc не только устарели, но неправильно, так как это sdould быть:

scons --prefix=/usr/include install. 

Однако, несмотря на то, уточняю --prefix=/usr/include я не могу найти какой-либо mongo внутри этой папки после установки. Я сталкиваюсь с той же проблемой, что и парень в этом thread. Я думаю, мой последний вопрос должен быть «Кто-нибудь в мире использует mongodb в C++?»

EDIT

Если я пытаюсь сделать

$ sudo git clone [email protected]:mongodb/mongo-cxx-driver.git 

Тогда я получаю Could not read from remote repository и т.д. Похоже, что они сделали все, чтобы предотвратить использование mongdb в C++.

+0

Ответ Petesh на вопрос, который вы указали, предполагает наличие пакетов в репозиториях Ubuntu. Разве пакеты 'mongodb-dev' и' libmongo-client-dev' не содержат то, что вы хотите? – Leiaz

+0

'sudo apt-get install mongodb-dev' => сообщение об ошибке' Невозможно найти пакет'. Похоже, что все рекомендации до января 2015 года устарели, и необходимо сделать совершенно новый шаг за шагом по установке и использованию драйвера mongodb в Ubuntu. – Jacobian

+0

Я хочу, чтобы кто-то из разработчиков mongodb мог предоставить такой учебник. – Jacobian

ответ

2

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)

Современные инструкции по сборке драйвера можно найти на странице GitHub Wiki для драйвера на C++. Пожалуйста, смотрите следующее:

https://github.com/mongodb/mongo-cxx-driver/wiki/Download-and-Compile-the-Legacy-Driver

https://github.com/mongodb/mongo-cxx-driver/wiki/Tutorial

+1

Я также получил ответ в этой теме - http://askubuntu.com/questions/652273/unable-to-locate-package-mongodb-dev. Я только что загрузил пакет .deb с http://launchpadlibrarian.net/170834766/mongodb-dev_2.4.9-1ubuntu2_i386.deb и сделал все остальное. – Jacobian

+0

И это работает ... – Jacobian

+0

Можете ли вы, пожалуйста, посоветовать мне, где я могу читайте об api функций. Например, для меня недостаточно просто называть 'mongo :: DBClientConnection c; c.connect ("локальный"); 'Потому что я хочу определить номер порта, логин пользователя и пароль пользователя. На этой странице я только понимаю, как указать порт - точно так же, как c.connect ("127.0.0.1:8080"); Но как насчет других параметров? Я ничего не вижу о пользователе и пароле. Должен ли я сделать это как user: [email protected]: 8080, или я должен сделать это по-другому? Можете ли вы дать ссылку на документацию, где я могу прочитать об этом? – Jacobian

1

записку от года на: многие из перечисленных выше ссылок в настоящее время устарели и указывают вперед на эти github pages. Эта страница является более общей, чем предполагаемые выше респонденты. Затем есть указатель на this tutorial, что хорошо, но делает несколько предположений о том, что ваша среда разработки более или менее похожа на разработчиков mongo.

Это не так гладко, как хотелось бы, даже на ubuntu 16.04. Прочитайте все это с префиксом «Здесь будут драконы».

Пара заметные проблемы:

  • В учебнике указует на конкретный файл для извлечения с помощью завитка, а не указывая на хранилище GitHub и предлагая делать клон. Это рецепт того, что вы немного устарели. Если я расскажу своей инфраструктуре о выпуске 3.0.1, она будет счастливо делать это навсегда, а не обновлять. Тем не менее, похоже, что компиляция из git в порядке.

  • Необходимое условие: установка libmongoc. Конечно, похоже, что установка из стандартных пакетов ubuntu достаточно, так как это говорит ссылка на странице. Но установщик mongocxx хочет> = 1.3.4. Поэтому требуется установка из git.

  • Это зависит от libbson> = 1.3.4, который позже установленной версии Ubuntu 16.04. Поэтому установка этого тоже требуется из git.

  • Обратите внимание, что ни один из пакетов git не указывает, какую ветку или тег запрашивать, чтобы получить производственную сборку. Глядя на все теги на мастере и набирать числовые по величине без «rc» в имени, похоже, работает. Тег, называемый «релиз» или «текущий», будет о-о-о-о.

  • Сборка (ввод make) пытается сделать установку подпакета EP_mnmlstc_core, и это не удается. Таким образом, вся сборка, по-видимому, должна выполняться как root.

  • Сначала pkg-config не работал для меня на mongocxx. Тогда это произошло. Я предполагаю, что сделал некоторые тонкие опечатки, которые я не вижу оглядываясь назад, но я все еще не вижу этого. В качестве альтернативы, что-то произошло, так как это заработало. затем

Компиляция заключается в следующем:

g++ --std=c++11 c++-hello-world-v3.cc -o hw \ 
    $(pkg-config --cflags --libs libmongocxx) \ 
    -Xlinker -rpath /usr/local/lib 

Я бы очень хотел, чтобы подать вопрос документации со всем этим на Монго-х github repo. К сожалению, они отключили отслеживание проблем, вместо этого указывают мне на их экземпляр jira, и там я, похоже, не имею права создавать проблемы. (Иногда я скучаю по тому, что находится перед моим носом.) [Обновление: Дэвид Голд любезно entered the bug info и отметил, как я мог бы иметь.]

+0

Благодарим вас за подробную обратную связь. Давайте начнем с проблемы с привязкой. Возможно, вы также установили libmongoc и libbson из пакетов? Являются ли копии в/usr/local/lib единственными в вашей системе? Если нет, возможно ли, что, поскольку вы не указали путь к lib, который вы не собираете libbson из/usr/local, а еще один? Можете ли вы попробовать добавить -L/usr/local/lib в свою линию ссылок? Другие вещи, которые следует учитывать, - это удаление системы libmongoc и libbson. Наконец, лучший способ выразить правильные флаги ссылок - использовать pkg-config. Почему это не сработало для вас? – acm

+0

FYI: Я записал ваши заметки как [CXX-1070] (https: //jira.mongodb.org/browse/CXX-1070) в качестве напоминания об устранении этих проблем в документах. – xdg

+0

Я, должно быть, сделал очень тонкую опечатку вчера с pkg-config. Сегодня он работает правильно. И -L также решил ошибки компоновщика (как и переход на использование pkg-config). Запуск (или ldd) говорит нет: libmongocxx.so._noabi, libbsoncxx.so._noabi не найден. Ага, который работает, устанавливает LD_LIBRARY_PATH. (Ick. ;-) – jma

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