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 ответов

24 просмотра

скорее всего, дело в связывании 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
слышал звон, да не помню где он спасибо, надо буде...

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

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

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

Господа, а что сейчас вообще с рынком труда на делфи происходит? Какова ситуация?
Rꙮman Yankꙮvsky
29
А вообще, что может смущать в самой Julia - бы сказал, что нет единого стандартного подхода по многим моментам, поэтому многое выглядит как "хаки" и произвол. Короче говоря, с...
Viktor G.
2
30500 за редактор? )
Владимир
47
а через ESC-код ?
Alexey Kulakov
29
Гайс, вопрос для разносторонее развитых: читаю стрим с юарта, нада выделять с него фреймы с определенной структурой, если ли чо готовое, или долбаться с ринг буффером? нада у...
Vitaly
9
Чёт не понял, я ж правильной функцией воспользовался чтобы вывести отладочную информацию? но что-то она не ловится
notme
18
У меня есть функция где происходит это: write_bit(buffer, 1); write_bit(buffer, 0); write_bit(buffer, 1); write_bit(buffer, 1); write_bit(buffer, 1); w...
~
14
Добрый день! Скажите пожалуйста, а какие программы вы бы рекомендовали написать для того, чтобы научиться управлять памятью? Можно написать динамический массив, можно связный ...
Филипп
7
Недавно Google Project Zero нашёл багу в SQLite с помощью LLM, о чём достаточно было шумно в определённых интернетах, которые сопровождались рассказами, что скоро всех "ибешни...
Alex Sherbakov
5
длина пакета фиксированная, или меняется?
Okhsunrog
7
Карта сайта