sprof "PLTREL не найдена ошибка"

Я пытаюсь профилировать нашу общую библиотеку, но всякий раз, когда у меня установлена ​​переменная окружения LD_PROFILE, я получаю "PLTREL not found in object ". Что дает? Я пропускаю какой-нибудь флаг компоновщика или как? Похоже, в интернете нет информации об этом. Страница man для sprof составляет около 10 слов.

2 ответа

Решение

Согласно неотвеченному вопросу о группах Google, похоже, вы не первый человек, столкнувшийся с этой проблемой.

Я думаю, что pltrel означает plt-относительный; в некоторых заметках о дизайне ELF,

В сегменте кода создан раздел.plt, представляющий собой массив заглушек функций, используемых для обработки разрешения библиотечных вызовов во время выполнения.

И вот еще немного:

Следующий раздел, который я хочу упомянуть, это раздел.plt. Он содержит таблицу переходов, которая используется, когда мы вызываем функции в разделяемой библиотеке. По умолчанию все записи.plt инициализируются компоновщиком не для указания на правильные целевые функции, а для указания на сам динамический загрузчик. Таким образом, при первом вызове любой данной функции динамический загрузчик ищет функцию и фиксирует цель.plt, чтобы при следующем использовании этого слота.plt мы вызывали правильную функцию. После внесения этого изменения динамический загрузчик вызывает саму функцию.

Мне кажется, что есть проблема с тем, как разделяемая библиотека была скомпилирована или собрана. Надеемся, что еще несколько поисков в разделе эльфийского PLT приведут вас на правильный путь.

Нашел это, которое может быть актуально для вас:

Известные проблемы с LD_AUDIT

➢ LD_AUDIT не работает с общими библиотеками без кода в них.

➢ Пример ICU-4.0 "libicudata.so"

➢ Ошибка: "PLTREL не найден в объекте /usr/lib/libicudata.so.40"

➢ Перекомпилировать после исправления libicudata, выполнив sed -ing -nostdlib и т. Д. Sed -i - "s / -nodefaultlibs -nostdlib //" config /mh-linux

Кажется, то же самое относится и к LD_PROFILE

Другие вопросы по тегам