почему nm не дает результата для чередования libtest.so
В исходной libtest.so
есть две таблицы символов: "обычная" (в.symtab
и .strtab
разделов) и динамический (в разделах .dynsym
и .dynstr
).
Если бы strip
удалил обе таблицы символов, ваша библиотека была бы совершенно бесполезна: динамический загрузчикне удалось разрешить какие-либо символы в нем.Так что strip
делает единственное, что имеет смысл: удаляет «обычную» таблицу символов, оставляя динамическую таблицу без изменений.
Вы можете видеть символы в динамической таблице символов с помощью nm -D
или readelf -s
.
«Обычная» таблица символов полезна только для отладки (например, она содержит записи для статических функций, которые не экспортируются библиотекой и не отображаются в таблице динамических символов).
Но динамический загрузчик никогда не смотрит на «обычную» таблицу символов (которая не в формате, подходящем для быстрого поиска символов);только на динамическом.Таким образом, «правильная» таблица символов не нужна для корректной работы программы, а динамическая -.