#c #linux #unix #posix #standards
#c #linux #unix #posix #стандарты
Вопрос:
- Большинство компонентов стандартной библиотеки C экспортируются в виде исходного кода, то есть предоставляются только в заголовочных файлах.
- Большинство функций библиотеки C предоставляются libc.so .
Итак, мои вопросы:
Зачем нам нужен libstdc .so?
Какое содержимое находится в libstdc .so?
Комментарии:
1. Смотрите сами: github.com/gcc-mirror/gcc/tree/master/libstdc++-v3/src
2. Ваше первое предложение совершенно неверно. Ваш вопрос основан на ложной предпосылке. И даже если бы это было правдой, тот факт, что существует хотя бы один символ, который не «экспортируется в исходную форму», является достаточным объяснением, поэтому ваш вопрос также основан на непоследовательности.
Ответ №1:
В библиотеке определено множество символов. Примечательно, что большая часть языковой поддержки и все классы исключений стандартной библиотеки определены в library .
Даже если многие компоненты в стандартной библиотеке C являются шаблонами и, следовательно, имеют встроенное определение, они выигрывают от явного создания экземпляра. Использование явных экземпляров библиотеки IOStreams (и объявление их как extern
шаблонов) значительно улучшает время компиляции.
Чтобы выяснить, какие символы определены в библиотеке, используйте nm
: он напечатает символы, определенные и на которые ссылается библиотека. Имена могут быть искажены, что будет исправлено путем преобразования результата в подходящий c filt
.
Комментарии:
1. Не были ли внешние шаблоны устаревшими, потому что никто не мог понять, что это значит?
2. @ShacharShemesh: экспортированный шаблон был удален (а не просто устарел), хотя в первую очередь потому, что они не совсем соответствовали тому, для чего они предназначались, и большинство разработчиков не хотели их реализовывать. В шаблонах нет ничего проблемного или сложного для понимания
extern
:extern
шаблон просто объявляет, что для объявленного экземпляра не должно выполняться неявное создание экземпляра. Вместо этого будет предоставлен подходящий явный экземпляр.