Каковы плюсы и минусы статического связывания библиотеки? - PullRequest
11 голосов
/ 16 марта 2010

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

Мне было бы неплохо статически связать библиотеки, чтобы исполняемый файл не имел никаких зависимостей. Таким образом, конечный пользователь может просто поместить исполняемый файл в каталог и начать его использовать.

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

Так в чем плюсы и минусы статически связывающей библиотеки?

Я уже знаю, что исполняемый файл будет больше. Но я не понимаю, почему это сделало бы мое приложение менее переносимым.

Ответы [ 4 ]

5 голосов
/ 16 марта 2010

Плюсы:
Нет зависимостей.

Минусы:
Повышенное использование памяти, поскольку ОС больше не может использовать общую копию библиотеки.
Если необходимо обновить библиотеку, ваше приложение необходимо перестроить. Это вдвойне важно для библиотек, в которых есть исправления безопасности.

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

1 голос
/ 16 марта 2010

Допустим, включаемая вами статическая библиотека «A» зависит от функции «B». Если эта зависимость не может быть выполнена целевой системой, то ваша программа не запустится.

Но если вы используете динамическое связывание, пользователь может установить другую версию библиотеки "A", которая использует функцию "C" вместо "B", чтобы она могла работать успешно.

0 голосов
/ 16 марта 2010

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

Однако вышеупомянутая проблема в динамически связанных библиотеках может быть устранена путем динамической загрузки .

0 голосов
/ 16 марта 2010

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

...