автоматическое связывание сокетной разделяемой библиотеки в * nix - PullRequest
4 голосов
/ 02 марта 2012

Я изучаю сетевое программирование с помощью примеров исходных кодов по этой ссылке http://cs.baylor.edu/~donahoo/practical/CSockets/textcode.html. Во время компиляции мне просто интересно, почему в среде Solaris мне приходится вручную связывать сокет и библиотеку nsl в файле make, но когда вLinux машина, мне не нужно этого делать?

Ответы [ 2 ]

6 голосов
/ 02 марта 2012

Используемая документация: http://developers.sun.com/solaris/articles/solaris_linux_app.html

Это связано с тем, что libc linux, glibc (-lc, который по умолчанию связан со всеми программами), включает в себя сокетную часть POSIX;и nis/nis+ динамические библиотеки в linux загружаются динамически и с помощью libc.

Но в Solaris есть много библиотек с базовыми функциями, которых нет в libc.(libc, libucb, libmalloc, libsocket, libxnet и т. д.).Я думаю, это было дизайнерское решение, позволяющее пользователю связывать только те части API, которые ему нужны.

В linux есть также некоторые базовые библиотеки вне libc: libaio, librt, libm.

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

Этот вопрос много обсуждается, например, http://web.archiveorange.com/archive/v/KcxCHdLNpD6NANxmAt3b http://mail.opensolaris.org/pipermail/opensolaris-code/2007-January/010316.html

серьезно рассматривают возможность сворачивания libnsl и libsocket в libc.

Было бы неплохо переместить ТОЛЬКО текущие функциональные возможности, основанные на POSIX и других стандартах (Unix98 и т. Д.), В libnsl + libsocket, в libc и сохранить все элементы оболочки compatibilitybilty в libnsl / libsocket, чтобы избежать получения libcраздутый с 20-летним обходным путем обратной совместимости Unix

2 голосов
/ 02 марта 2012

Поскольку в Linux весь сетевой API реализован в libc.so, который по умолчанию связан с каждой программой на Си, а в Solaris он реализован в отдельных библиотеках.

...