Как я могу скомпилировать программу Mongodb-c-driver?

#c #linux #mongodb #linker

#c #linux #mongodb #компоновщик

Вопрос:

Я использую

 gcc -o mongotest mongotest.c $(pkg-config --cflags --libs libmongoc-1.0)
  

для компиляции кода драйвера mongodb c, а затем

 LD_LIBRARY_PATH=/usr/local/lib ./mongotest
  

для запуска.

Если я попытаюсь без LD_LIBRARY_PATH=/usr/local/lib, у меня будет

 ./mongotest: error while loading shared libraries: libmongoc-1.0.so.0: cannot open shared object file: No such file or directory
  

Как я могу запустить программу без LD_LIBRARY_PATH=/usr/local/lib,
Правильно ли это делать? Как я могу отлаживать программы-драйверы mongodb c?

Ответ №1:

Путь /usr/local/lib должен быть в /etc/ld.so.conf или в одном из файлов в /etc/ld.so.conf.d/ каталоге. Таким образом, библиотека mongoc попадет в кэш, когда вы выполните команду ldconfig от имени root.

Вы можете проверить, находится ли библиотека mongoc в кэше динамического компоновщика, выполнив эту команду

 ldconfig -p | grep mongoc
  

Если это так, вы можете безопасно запускать свою программу без явного указания LD_LIBRARY_PATH.

Другой способ проверить, правильно ли связан ваш исполняемый файл, — это получить информацию о связывании с помощью ldd команды. Она напечатает все связанные библиотеки.

 ldd mongotest
  

Если вы видите, /usr/local/lib/libmongoc.so.[numbers] это означает, что она связана с mongoc библиотекой.

Комментарии:

1. Я просто хочу предоставить личные реквизиты как для переназначения вопроса, так и для ответа в правильном контексте. Для других наблюдателей единственным тегом в вопросе было просто «mongodb».

2. @NeilLunn У меня были сомнения, следует ли мне удалять mongodb тег, если вы уверены в этом, пожалуйста, сделайте это.

3. Я думаю, что тег mongodb все еще актуален, поскольку он относится к исходному коду драйвера c. Это форум по программированию, верно? Я просто рад, что вы увидели в этом проблему в основном «C». И ответил и пометил соответствующим образом. Итак, все совершенно верно. Хороший ответ и обработка.