Почему тот же исполняемый в другом расположении загружается разные libc.co

top вывод по умолчанию предназначен для терминала. Таким образом, используются различные управляющие коды (невидимые при просмотре в терминале). К ним относятся различные способы перемещения по экрану. Стиль вывода и т. Д.

Чтобы получить более удобный вывод для текстовых файлов / редактирования или чего-либо еще, используйте пакетный режим.

top -b ...
1
22.10.2018, 06:32
1 ответ

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

Целью $ORIGINявляется создание исполняемых файлов, которые могут быть перемещены в другое место вместе с общими библиотеками, от которых они зависят :, если двоичный файл перемещается в /alt/opt/binи имеет $ORIGIN/../libв своем пути выполнения, динамический компоновщик сначала будет искать свои библиотеки в /alt/opt/lib. Более подробная информация находится на справочной странице ld.so(8).

Проблема с вашим компилятором заключается в том, что он использует устаревшийDT_RPATH(вместо DT_RUNPATH), который всегда ищется первым и не может быть переопределен с помощью LD_LIBRARY_PATH. Чтобы избежать этого, попробуйте использовать от -Wl,--enable-new-dtagsдо gcc:

.
gcc -Wl,--enable-new-dtags file.c

Это укажет компоновщику использовать DT_RUNPATHвместо DT_RPATHдля параметра -rpath, независимо от того, задано ли оно в командной строке или в спецификациях. Предполагается, что это не поддерживается в старых системах, но, насколько я помню, это было довольно давно.

2
27.01.2020, 23:42

Теги

Похожие вопросы