Можно ли (и если да, то как) определить общие библиотеки приложения, которые используются приложением во время выполнения ?В принципе, могу ли я программно получить вывод ldd
?Предпочтительное решение C / C ++ не просто переходит к выполнению ldd в командной строке.
Обратите внимание на следующее: у меня есть приложение драйвера, которое вызывает doAction()
из общей библиотеки libfoo
.Я компилирую приложение один раз, а затем устанавливаю LD_LIBRARY_PATH
в соответствующий каталог, содержащий libfoo
с определенным символом doAction()
.Таким образом, у меня может быть несколько реализаций doAction()
в разных libfoo
с, но я могу скомпилировать приложение только один раз.
Реальным примером может быть профессор, у которого класс студентов реализует doAction()
.Вместо того, чтобы составлять тестовый комплект для реализации каждого ученика doAction()
, студенты отправляют общую библиотеку, и профессор может просто изменить LD_LIBRARY_PATH
, чтобы оценить каждого ученика.
Моя цель в получении библиотеки, используемой в настоящее времявыполнить md5sum
в библиотеке во время выполнения, чтобы убедиться, что я вызываю правильную библиотеку.В надуманном примере все учащиеся передали бы md5sum
своей библиотеки, и профессор мог сопоставить студенту выполняемый исполняемый файл + совместно используемую библиотеку (поиск в базе данных, запись в файл, ...), чтобы предотвратить несчастный случай при настройке LD_LIBRARY_PATH
влияет на оценку другого ученика (забыл изменить LD_LIBRARY_PATH
на каталог Дэвида и снова побежал с libfoo
Билла).