2012-03-02 11 views
4

私はこのリンクhttp://cs.baylor.edu/~donahoo/practical/CSockets/textcode.htmlのサンプルソースコードを通じてネットワークプログラミングを学習しています。コンパイル時に、なぜSolaris環境で私は手動でソケットとnslライブラリをmakeファイルにリンクする必要があるのだろうかと疑問に思っていますが、Linuxマシンではそれをする必要はありませんか?* nixにソケット共有ライブラリを自動的にリンク

答えて

6

ドキュメント:http://developers.sun.com/solaris/articles/solaris_linux_app.html

、Linuxのlibcの、(すべてのプログラムにデフォルトでリンクされている-lc、)はglibcはPOSIXのソケット部を含んでいるためです。そしてlinuxのnis/nis+動的ライブラリはlibcによって動的に読み込まれます。

しかし、Solarisでは、基本的な機能を持つ多くのライブラリがあり、libcには含まれていません。 (libc、libucb、libmalloc、libsocket、libxnetなど)私は、彼が必要とするAPIのユーザー部分のみをリンクできるようにするのは設計ソリューションだと思います。

libcには、libaio、librt、libmの基本ライブラリもいくつかあります。

別個のライブラリを使用すると、システムの一部だけを更新する方が簡単です。同じシステムに共存するいくつかのライブラリのいくつかの実装(たとえば、古いバージョンのUNIXでより大きな互換性/回避策を提供する)を持つことが可能です。

この質問は、 http://web.archiveorange.com/archive/v/KcxCHdLNpD6NANxmAt3bhttp://mail.opensolaris.org/pipermail/opensolaris-code/2007-January/010316.html

真剣のlibcにはlibnslとlibsocket折りたたみ検討しています。

それだけで現在のPOSIXベースおよびその他の 標準ベースの機能を移動するとよいでしょう(Unix98のなど)はlibnsl + libsocket機能に をlibcのとはlibnsl/libsocket 内のすべてのcompatibiltyラッパーのものを維持するためにlibcが20年のUnixで肥大化するのを避けるために 下位互換性回避策

+0

ありがとうございました。私はまた、solarisシステムでは、アプリケーションを可能な限り小さくしようと考えていたので、動的リンク(http://pages.cs.wisc.edu/~thomas/X/static-linking .html) –

2

Linuxでは、ネットワーキングAPI全体がlibc.soに実装されています。これはデフォルトですべてのCプログラムにリンクされていますが、Solarisでは別のライブラリで実装されています。使用

関連する問題