Подтвердить что ты не робот

Какая разница между библиотекой C/С++ и библиотекой STL С++ в XCode?

Я пытаюсь создать библиотеку С++ в Xcode, и я не уверен, нужно ли выбирать библиотеку C/С++ или библиотеку STL С++? Я заметил, что параметр STL C++ Library не позволяет создавать статическую библиотеку и заставлять вас создавать динамическую библиотеку. Однако параметр C/C++ Library также позволяет создавать динамическую библиотеку в дополнение к созданию статической библиотеки.

Какая разница между этими двумя параметрами и когда я должен использовать их? Я читал описания ниже вариантов, но, к сожалению, они не очень полезны.

С другой стороны, почему файл статической библиотеки отличается от файла динамической библиотеки вообще? Похоже, что разница в основном заключается в том, как библиотека найдена (упакована с вашим приложением и зависит от присутствия на целевой машине), а не от функционирования или кода самой библиотеки. Было бы здорово, если кто-нибудь сможет это прояснить.

enter image description here

enter image description here

4b9b3361

Ответ 1

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

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

который вы выбрали для реализации, зависит от ваших требований к использованию. Если вам нужен автономный исполняемый файл, который пользователь может просто перетащить в свою папку приложений, не беспокоясь о зависимостях, статическая привязка ваших библиотек может быть способом.

Но для более масштабных проектов в приложениях, которые предоставляют тонну функциональности, может быть непозволительно и не нужно загружать сразу все функции. Предоставление набора динамически загружаемых библиотек может как сохранить память, так и сократить время запуска. Затем, когда пользователь обращается к функциям, загружается соответствующий код и, возможно, функции, которые не были использованы в то время, могут быть выгружены.

Кроме того, если вы вносите изменения в код, вы можете просто перераспределить одну или две библиотеки, а не перекомпилировать и повторно связать и перераспределить весь исполняемый файл. И нужно ли я упомянуть о перспективах плагинов?

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