У меня есть код на C++, который использует несколько сторонних библиотек. Код компилируется отлично, но во время выполнения он не загружает некоторую общую библиотеку (libintbasic.so). Учитывая условие, я не могу установить какую-либо библиотеку в систему, единственный выход - найти, какая функция вызывает эту библиотеку. Как я могу узнать, кто звонит в эту библиотеку (мой код не вызывает это напрямую).Как найти, кто вызывает функции общей библиотеки?
ответ
Удалить ссылку -lintbasic, вы увидите все функции, которые нуждаются в этой библиотеке в сообщениях об ошибках. Это не чисто, но должно работать нормально.
Я не могу установить любую библиотеку в систему,
Это, как представляется, фиктивное требование: четко вы можете скопировать исполняемый файл в систему. Установка дополнительной библиотеки в один и тот же каталог не намного сложнее.
Как я мог это узнать, кто звонит эту библиотеку
Есть два случая:
- бинарный файл или одну из библиотек напрямую связана со ссылками на
libintbasic.so
. Ваш двоичный файл не будет запускаться вообще, или - ваш двоичный файл, или одна из библиотек, непосредственно связанная с вызовами
dlopen("libintbasic.so",...)
, и сбой при этомdlopen
не удался.
Отладка первого случая часто бывает проще всего путем установки LD_DEBUG=files,libs
. Затем динамический загрузчик скажет вам, какие библиотеки загружаются и почему они требуются.
Отладка второй случай легко с gdb
: установить точку останова на dlopen
и выполнять where
и info shared
команды каждый раз, когда достигает точки останова.
- 1. Вызов функции из общей библиотеки
- 2. Найти, кто вызывает метод
- 3. Android NDK вызывает API статической библиотеки внутри общей библиотеки
- 4. Статическая ссылка функции общей библиотеки в gcc
- 5. C - Использование общей библиотеки
- 6. Совместимость общей библиотеки
- 7. Найти функции в общей библиотеке JNI?
- 8. Поиск адреса локальной переменной, определенной внутри функции общей библиотеки
- 9. Найти, кто вызывает метод в классе РНР
- 10. Связывание общей библиотеки с общей библиотекой
- 11. Сбор общей библиотеки gcc
- 12. Создание простой общей библиотеки
- 13. найти причину испорченной общей ошибки библиотеки (Qt5 C++)
- 14. Загрузка нескольких копий общей библиотеки
- 15. Структура загрузки динамической общей библиотеки
- 16. Как проверить открытые функции общей библиотеки в программе
- 17. Обновление общей библиотеки Symfony
- 18. Создание минимальной общей библиотеки
- 19. Связывание общей библиотеки Autotools
- 20. Сборка для общей библиотеки без .so-файла
- 21. Как экспортировать символы из общей библиотеки
- 22. Кто вызывает функцию?
- 23. сообщение об ошибке при загрузке функции из общей библиотеки
- 24. C++ скопировать все функции из общей библиотеки в исполняемый файл
- 25. Использование libtool для загрузки дублированного имени функции из общей библиотеки
- 26. Выполнение файла общей библиотеки из php-скрипта
- 27. Вызов общей библиотеки из C++
- 28. создание общей библиотеки из C++
- 29. Библиотеки общей библиотеки данных для C?
- 30. Как я могу найти, кто вызывает мой метод в программе?
Найдите строку, вызывающую вызов, используя отладчик. – user2079303
Возможно, вы захотите добавить тег «linux» –