#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». И ответил и пометил соответствующим образом. Итак, все совершенно верно. Хороший ответ и обработка.