Что означает для программы ссылка на libstdc ++ и libc ++? - PullRequest
0 голосов
/ 23 декабря 2018

Недавно я увидел список программ на C ++ и libstdc ++, и libc ++ в его динамическом разделе (readelf -d).

Я запутался, потому что один из GNU, а другой из LLVM, и они оба являются реализациямиSTL.Тогда как программа может связать оба?Что это значит?

Как он разрешает символ (например, std::string), который оба предоставляют при связывании?

1 Ответ

0 голосов
/ 23 декабря 2018

Это может произойти, например, если программа связывается с одной реализацией стандартной библиотеки, а также со статической библиотекой, которая связывается с другой.Это не вызвало бы проблем, потому что имена, такие как std::string, искажены во что-то более длинное и более сложное, которое не будет конфликтовать.(Это также то, как функции с одним и тем же именем могут быть перегружены и вызваны с разными типами аргументов, и почему программы, написанные для более старых версий стандартной библиотеки, не ломаются при обновлении.)

Одно важное предупреждение:это работает только в том случае, если STL не является частью интерфейса какого-либо компонента, связанного с другой версией.В противном случае любой клиентский код будет компилироваться с другой версией стандартной библиотеки, на которую он ссылается при вызове этого компонента, или даже передавать неверные структуры данных в и из библиотеки.

...