Ответ 1
Статически связанная библиотека не может быть загружена во время выполнения, но должна быть включена в ваш двоичный файл при связывании исполняемого файла. Это означает, что все точки входа в код в статически связанной библиотеке хорошо определены и их адреса не будут меняться относительно начала исполняемого кода (таким образом, "статические" ).
В динамически загружаемых библиотеках нет способа узнать, где будет код, поэтому, когда библиотека загружается во время выполнения, для "привязки" загруженного кода требуется определенное количество служебных заданий. По сути, привязка отложена на время выполнения, поэтому ее также иногда называют "поздним связыванием".
который вы выбрали для реализации, зависит от ваших требований к использованию. Если вам нужен автономный исполняемый файл, который пользователь может просто перетащить в свою папку приложений, не беспокоясь о зависимостях, статическая привязка ваших библиотек может быть способом.
Но для более масштабных проектов в приложениях, которые предоставляют тонну функциональности, может быть непозволительно и не нужно загружать сразу все функции. Предоставление набора динамически загружаемых библиотек может как сохранить память, так и сократить время запуска. Затем, когда пользователь обращается к функциям, загружается соответствующий код и, возможно, функции, которые не были использованы в то время, могут быть выгружены.
Кроме того, если вы вносите изменения в код, вы можете просто перераспределить одну или две библиотеки, а не перекомпилировать и повторно связать и перераспределить весь исполняемый файл. И нужно ли я упомянуть о перспективах плагинов?
Различия между двумя шаблонами выше тонкие. Оба компилируют C в соответствии со стандартом GNU99. Но шаблон библиотеки C/С++ устанавливает xcode для компиляции С++ в соответствии со стандартом С++/GNU ++ 0x. С++/GNU ++ 0x позже был официально опубликован как С++/GNU ++ 11 в 2011 году. Оба шаблона по умолчанию используют libС++, но шаблон STL С++ позволяет вам вместо этого ссылаться на более старый libstdС++. Зачем вам это делать? Если ваш код ссылается на libС++, но вы также ссылаетесь на другие библиотеки, ссылающиеся на libstdС++, и вы сталкиваетесь с конфликтующими символами, вы можете решить это, связав вместо этого libstdС++. Шаблон библиотеки STL С++ также позволяет запросить, чтобы компилятор придерживался стандарта С++ 11, за исключением расширений GNU ++ 11, или возвращался к С++/GNU ++ 98 (если вам нужно скомпилировать устаревший код для пример).