170 похожих чатов

Вопрос больше в сторону линукса чем плюсов, но тем не

менее
$ readelf -Ws /usr/lib/libboost_program_options-mt.so | c++filt
Таблица символов «.dynsym» содержит 1163 элементов:
Чис: Знач Разм Тип Связ Vis Индекс имени
903: 0000000000054650 19 FUNC WEAK DEFAULT 11 boost::program_options::typed_value_base::~typed_value_base()
1022: 0000000000054510 15 FUNC WEAK DEFAULT 11 boost::program_options::typed_value_base::~typed_value_base()
1153: 0000000000054510 15 FUNC WEAK DEFAULT 11 boost::program_options::typed_value_base::~typed_value_base()
я бы понял почему так, если бы натравил readelf на статичекую либу - там было бы три объектника с реализацией одного инлайнового метода (например)
но почему так происходит для динамической либы? линкер же должен сводить дублирующиеся символы к одному уже при создании .so, не?

15 ответов

9 просмотров

скорее всего, дело в связывании https://en.wikipedia.org/wiki/Weak_symbol

Igor-Ivanov Автор вопроса
Sergey Sobolev
скорее всего, дело в связывании https://en.wikiped...

единственная гипотеза, да я просто не могу найти пока ни одного упоминания того, что weak могут дублироваться не только между разными объектами, но и в пределах одного 🤔

А так что выведет? objdump -T /usr/lib/libboost_program_options-mt.so | c++filt | grep "boost::program_options::typed_value_base::~typed_value_base()"

Igor-Ivanov Автор вопроса
Alexander Tulikov
А так что выведет? objdump -T /usr/lib/libboost_pr...

то же самое в другом обличьи 0000000000054650 w DF .text 0000000000000013 Base boost::program_options::typed_value_base::~typed_value_base() 0000000000054510 w DF .text 000000000000000f Base boost::program_options::typed_value_base::~typed_value_base() 0000000000054510 w DF .text 000000000000000f Base boost::program_options::typed_value_base::~typed_value_base()

Igor Ivanov
то же самое в другом обличьи 0000000000054650 w ...

это два разных деструктора, попробуй убрать c++filt и сравнить имена

Igor Ivanov
то же самое в другом обличьи 0000000000054650 w ...

Тогда это действительно из-за weak символов, объясняется почему и как тут: https://stackoverflow.com/questions/54750330/c-shared-libraries-have-duplicate-symbols

Igor-Ivanov Автор вопроса
Alexander Karaev
это два разных деструктора, попробуй убрать c++fil...

0000000000054650 w DF .text 0000000000000013 Base _ZN5boost15program_options16typed_value_baseD0Ev 0000000000054510 w DF .text 000000000000000f Base _ZN5boost15program_options16typed_value_baseD1Ev 0000000000054510 w DF .text 000000000000000f Base _ZN5boost15program_options16typed_value_baseD2Ev ...а это как? оО

Igor Ivanov
0000000000054650 w DF .text 0000000000000013 ...

::= D0 # deleting destructor ::= D1 # complete object destructor ::= D2 # base object destructor

Igor Ivanov
0000000000054650 w DF .text 0000000000000013 ...

The first destructor, called the complete object destructor, performs the destruction without calling delete() on the object. The second destructor, called the deleting destructor, calls delete() after destroying the object. Both destroy any virtual bases; a separate, non-virtual function, called the base object destructor, performs destruction of the object but not its virtual base subobjects, and does not call delete()

Igor-Ivanov Автор вопроса
Alexander Karaev
::= D0 # deleting destructor ::= D1 # complete obj...

а откуда это, какие-то сырцы гцц ответственные за манглинг?

Igor Ivanov
а откуда это, какие-то сырцы гцц ответственные за ...

https://itanium-cxx-abi.github.io/cxx-abi/abi.html#mangling-special-ctor-dtor там же в разделе Definitions есть определения для всех видов деструкторов

Igor-Ivanov Автор вопроса
Alexander Karaev
The first destructor, called the complete object d...

слышал звон, да не помню где он спасибо, надо будет прочитать

Igor-Ivanov Автор вопроса
Alexander Tulikov
Тогда это действительно из-за weak символов, объяс...

и за это спасибо, двоение .dynsym / .syntab тоже где-то неподалёку вроде видел

Igor Ivanov
слышал звон, да не помню где он спасибо, надо буде...

Тут недавно было уже но в контексте конструкторов

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

Обсуждают сегодня

А как старый хаскел с новым стыковать ? потому как тут работает https://play.haskell.org/saved/C3xpMzcd, а вот тут https://stepik.org/lesson/7602/step/9?unit=1473 нет ошибка C...
Fedor
131
Вопрос я правильно понимаю что в коде newtype ArrowMap k v = ArrowMap { getArrowMap :: k -> Maybe v } getArrowMap есть функция типа k -> Maybe v, если да, то не понимаю задач...
Fedor
61
Продолжая диалог про свифт в проде – сейчас возник вопрос в активном наборе бекендеров. В основном в нашей компании мы фанаты Java Spring и полностью ей довольны. Однако найм ...
Guseyn
27
Как Вы считаете нормально ли в двадцатых годах 21 века в ВУЗах Российской Федерации обучать студентов работе с TASM? Не слишком ли это "архаично"? (Если оффтоп или флейм для э...
Spiker01
52
Привет всем. Не знаю, удачный ли чатик я выбрал для вопроса, но он как будто в целом про концепцию фп и конкретно про Haskell. Прочитал, что в целом в мире фп нет идеи мутабел...
Gellert Cringewald
15
Комрады, хотел уточнить. Проперть в OnDestroy юнита-хозяина по-прежнему доступна? И еще уточнение: finalization юнита наступает раньше или позже OnDestroy?
Ed Doc
48
Читаю сейчас [нет, уже больше не читаю!] курсовую о Булгакове, написанную, похоже, с помощью ChatGPT. Это удивительный психоделический опыт. Текст в основном написан в стиле б...
✨ Uni [🌊 В отпуске]
1
Всем привет! поделитесь, пож-та, как кто дебажил / решал проблему с 504 Time out ошибкой от nginx, когда стучишься на свой vapor сервер? в логах /var/log/nginx/error.log е...
Paul
24
Как добавить ссылку в Быстрый доступ в Проводнике windows 10? Нашёл, как на power shell сделать, но может есть способ через Дельфи?
А
31
@helgispbru @Dreamer_0x01 @Pathologic93 @webber_12 Не уверен, что вам всем это жутко интересно, но в продолжение недавнего диалога отправлю свои наброски. Хочу понять, правил...
Андрей [aharito] Харитонов
13
Карта сайта