📄 dso.html.ja.euc-jp
字号:
プログラムシステムのインタフェ〖スを蝗って缄瓢で乖なう数恕とが
あります。</p>
<p>呵介の数恕では DSO は舍奶は<em>鼎铜ライブラリ</em>や <em>DSO
ライブラリ</em> と钙ばれていて、DSO の叹涟は
<code>libfoo.so</code> や <code>libfoo.so.1.2</code> のようになっています。
これらはシステムディレクトリ (奶撅 <code>/usr/lib</code>) に赂哼し、
悸乖プログラムへのリンクはビルド箕に <code>-lfoo</code> をリンカに
回年することで澄惟されます。これによりライブラリへの徊救が悸乖プログラムの
ファイルに今き哈まれて、弹瓢箕に Unix のロ〖ダが <code>/usr/lib</code> や、
リンカの <code>-R</code> のようなオプションによりハ〖ドコ〖ドされたパス、
茨董恃眶 <code>LD_LIBRARY_PATH</code> により肋年されたパス、の面から
<code>libfoo.so</code> の眷疥を斧つけることができます。それから、
悸乖プログラム面の (まだ踏豺疯の) シンボルを DSO にあるシンボルで
豺疯します。</p>
<p>舍奶は悸乖プログラム面のシンボルは DSO からは徊救されません
(DSO は办忍弄なコ〖ドによる浩网脱材墙なライブラリですので)。
ですから、さらなるシンボルの豺疯は涩妥ありません。
シンボルは Unix ロ〖ダにより窗链な豺疯が乖なわれますので、悸乖ファイル极咳は
部もする涩妥がありません。(悸狠のところ、琅弄でない数恕でリンクされている
すべての悸乖プログラムに寥み哈まれている倡幌脱のコ〖ドの办婶に
<code>ld.so</code> を弹瓢するコ〖ドが崔まれています)。よく蝗われる
ライブラリの瓢弄ロ〖ドの网爬は汤らかです。ライブラリのコ〖ドは
システムライブラリに <code>libc.so</code> のようにして办刨瘦赂するだけでよく、
プログラムのために涩妥なディスクの挝拌を泪腆することができます。</p>
<p>企つめの数恕では DSO は舍奶は<em>鼎铜オブジェクト</em>や
<em>DSO ファイル</em>と钙ばれていて、扦罢の橙磨灰を烧けることができます
(ただし、筛洁弄な叹涟は <code>foo.so</code> です)。
これらのファイルは奶撅はプログラム漓脱のディレクトリに弥かれ、
これらを蝗う悸乖プログラムへのリンクは极瓢弄にはされません。
ですので、悸乖プログラムは <code>dlopen()</code> を蝗って
悸乖箕に缄瓢で DSO をプログラムのアドレス鄂粗にロ〖ドする涩妥があります。
この箕爬では悸乖プログラムに滦して DSO のシンボルの豺疯は乖なわれません。
しかし、その洛わりに Unix のロ〖ダが DSO の (まだ踏豺疯の) シンボルを
悸乖プログラムによりエクスポ〖トされたシンボルと贷にロ〖ドされた
DSO ライブラリによりエクスポ〖トされたシンボル (泼に、どこにでもある
<code>libc.so</code> のすべてのシンボル) で极瓢弄に豺疯します。
こうすることで、DSO は呵介から琅弄にリンクされていたかのように、
悸乖プログラムのシンボルを梦ることができます。</p>
<p>呵稿に、DSO の API を网爬を栏かすために、プログラムは
稿でディスパッチテ〖ブル<em>など</em>でシンボルを蝗うことができるように、
<code>dlsym()</code> を蝗っていくつかのシンボルを豺疯します。
すなわち: 悸乖プログラムは涩妥なすべてのシンボルを缄瓢で豺疯しなければ
なりません。この怠菇の网爬はプログラムのオプショナルな婶尸は
涩妥になるまでロ〖ドする涩妥がない (だからメモリも久锐しない)
ことです。涩妥ならば、答塑プログラムの怠墙を橙磨するために
これらの婶尸を瓢弄にロ〖ドすることができます。</p>
<p>この DSO 怠菇は词帽なように斧えますが、警なくとも办つ岂しい爬が
あります: プログラムを橙磨するために DSO を蝗っているときに、
DSO が悸乖プログラムからシンボルを豺疯する爬です (企戎誊の数恕)。
これはなぜでしょうか。それは、DSO のシンボルを悸乖プログラムの
シンボルから≈嫡豺疯∽するというのはライブラリの肋纷
(ライブラリはそれを蝗脱するプログラムのことは部も
梦らない) に瓤していて、この怠墙はすべてのプラットフォ〖ムに
あるわけではなく、筛洁步もされていないからです。
悸狠には悸乖プログラムのグロ〖バルなシンボルは浩エクスポ〖トされることは
あまりなく、DSO から蝗うことができません。リンカにグロ〖バルシンボルすべてを
エクスポ〖トするようにさせる数恕を斧つけることが、悸乖箕にプログラムを
橙磨するために DSO を蝗うときの办戎の啼玛です。</p>
<p>鼎铜ライブラリのアプロ〖チが舍奶の数恕です。DSO 怠菇はそのために
肋纷されたものですから。したがって、その数恕はオペレ〖ティングシステムが
捏丁するほとんどすべての硷梧のライブラリで蝗われています。
办数、プログラムの橙磨のために鼎铜オブジェクトを蝗脱する、という数は
あまり蝗われていません。</p>
<p>1998 钳の箕爬で、悸乖箕に悸狠に怠墙橙磨のために DSO 怠菇を蝗っている
ソフトウェアパッケ〖ジは警しだけでした: Perl 5 (XS 怠菇と DnaLoader モジュ〖ル
によるもの)、Netscape サ〖バ<em>など</em>です。Apache はすでに
モジュ〖ルの车前を蝗って怠墙橙磨をしていて、柒婶弄にディスパッチリストに
答づいた嘲婶モジュ〖ルの Apache コア怠墙へのリンクを乖なっていましたので、
バ〖ジョン 1.3 から、Apache も DSO 怠菇を蝗う苗粗になりました。
Apache は悸乖箕に DSO を蝗ってモジュ〖ルをロ〖ドするようにすでに
笨炭烧けられていたのです。</p>
</div><div class="top"><a href="#page-header"><img alt="top" src="./images/up.gif" /></a></div>
<div class="section">
<h2><a name="advantages" id="advantages">网爬と风爬</a></h2>
<p>惧淡の DSO に答づいた怠墙は笆布の网爬があります:</p>
<ul>
<li>悸狠のサ〖バプロセスを寥み惟てるために、
ビルド箕に <code>configure</code> のオプションを蝗う洛わりに
悸乖箕に <code>httpd.conf</code> の肋年脱コマンド
<code class="directive"><a href="./mod/mod_so.html#loadmodule">LoadModule</a></code>
を蝗うことができますので、サ〖バパッケ〖ジの嚼起拉が光まりました。
たとえば、办つの Apache のインスト〖ルから
般う菇喇のサ〖バ (筛洁惹と SSL 惹、呵井菇喇と橙磨惹 [mod_perl, PHP3]
<em>など</em>) を悸乖することができます。</li>
<li>インスト〖ルの稿であっても、サ〖バのパッケ〖ジをサ〖ドパ〖ティ
モジュ〖ルで词帽に橙磨できるようになりました。これは、Apache コア
パッケ〖ジと、PHP3, mod_perl, mod_fastcgi <em>など</em> の纳裁の
パッケ〖ジを侯喇できるので、警なくともベンダのパッケ〖ジ瓷妄荚にとって
络きな网爬があります。</li>
<li>Apache モジュ〖ルの倡券が词帽になります。
これは DSO/<code>apxs</code> の寥み圭わせにより、Apache ソ〖スツリ〖の
嘲で侯度でき、倡券面のモジュ〖ルの糠しいバ〖ジョンを
悸乖面の Apache サ〖バに寥み哈むために <code>apxs -i</code> と
<code>apachectl restart</code> を乖なうだけで紊くなるからです。</li>
</ul>
<p>DSO には笆布の风爬があります:</p>
<ul>
<li>すべてのオペレ〖ティングシステムがプログラムのアドレス鄂粗に
コ〖ドを瓢弄ロ〖ドすることをサポ〖トしているわではないので、
プラットフォ〖ムによっては DSO 怠菇は蝗えません。</li>
<li>Unix のロ〖ダがシンボルの豺疯をする涩妥ができたので、
そのオ〖バヘッドによりサ〖バの弹瓢箕粗が腆 20% 觅くなっています。</li>
<li>疤弥润巴赂コ〖ド (PIC) (条庙 position independent code) は
陵滦アドレスのために剩花なアセンブラのトリックが涩妥なことがあり、
それは涩ずしも冷滦アドレスと票じくらいの庐刨がでるわけではありませんので、
プラットフォ〖ムによってはサ〖バの悸乖庐刨が腆 5% 觅くなります。</li>
<li>DSO モジュ〖ルはすべてのプラットフォ〖ムで戮の DSO に答づいた
ライブラリに滦してリンクできる (<code>ld -lfoo</code>)
というわけではありませんので (たとえば、a.out のプラットフォ〖ムでは
この怠墙はありませんが、ELF のプラットフォ〖ムにはあります)、
すべての硷梧のモジュ〖ルに DSO 怠菇を蝗えるわけではありません。
咐い垂えると、DSO ファイルとしてコンパイルされたモジュ〖ルの
蝗えるシンボルは、
Apache のコアのシンボル、C ライブラリ (<code>libc</code>) と
Apache コアが蝗っている戮のすべての琅弄なライブラリと瓢弄ライブラリの
シンボル、PIC による琅弄なライブラリ (<code>libfoo.a</code>) の
シンボルのみに扩嘎されます。その戮のコ〖ドを蝗う数恕は、
Apache コア极咳がすでにそのコ〖ドへの徊救があるようにするか、
<code>dlopen ()</code> を蝗ってコ〖ドを极尸极咳でロ〖ドするかの
どちらかしかありません。</li>
</ul>
</div></div>
<div class="bottomlang">
<p><span>Available Languages: </span><a href="./en/dso.html" hreflang="en" rel="alternate" title="English"> en </a> |
<a href="./es/dso.html" hreflang="es" rel="alternate" title="Espa彨衞l"> es </a> |
<a href="./fr/dso.html" hreflang="fr" rel="alternate" title="Fran彨產is"> fr </a> |
<a href="./ja/dso.html" title="Japanese"> ja </a> |
<a href="./ko/dso.html" hreflang="ko" rel="alternate" title="Korean"> ko </a></p>
</div><div id="footer">
<p class="apache">Copyright 2006 The Apache Software Foundation.<br />Licensed under the <a href="http://www.apache.org/licenses/LICENSE-2.0">Apache License, Version 2.0</a>.</p>
<p class="menu"><a href="./mod/">モジュ〖ル</a> | <a href="./mod/directives.html">ディレクティブ</a> | <a href="./faq/">FAQ</a> | <a href="./glossary.html">脱胳</a> | <a href="./sitemap.html">サイトマップ</a></p></div>
</body></html>
⌨️ 快捷键说明
复制代码
Ctrl + C
搜索代码
Ctrl + F
全屏模式
F11
切换主题
Ctrl + Shift + D
显示快捷键
?
增大字号
Ctrl + =
减小字号
Ctrl + -