1<?xml version="1.0" encoding="UTF-8"?>
2<!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.0 Strict//EN" "http://www.w3.org/TR/xhtml1/DTD/xhtml1-strict.dtd">
3<html xmlns="http://www.w3.org/1999/xhtml" lang="tr" xml:lang="tr"><head><!--
4        XXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXX
5              This file is generated from xml source: DO NOT EDIT
6        XXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXX
7      -->
8<title>Devingen Paylaşımlı Nesne Desteği - Apache HTTP Sunucusu</title>
9<link href="/style/css/manual.css" rel="stylesheet" media="all" type="text/css" title="Main stylesheet" />
10<link href="/style/css/manual-loose-100pc.css" rel="alternate stylesheet" media="all" type="text/css" title="No Sidebar - Default font size" />
11<link href="/style/css/manual-print.css" rel="stylesheet" media="print" type="text/css" /><link rel="stylesheet" type="text/css" href="/style/css/prettify.css" />
12<script src="/style/scripts/prettify.min.js" type="text/javascript">
13</script>
14
15<link href="/images/favicon.ico" rel="shortcut icon" /></head>
16<body id="manual-page"><div id="page-header">
17<p class="menu"><a href="/mod/">Modüller</a> | <a href="/mod/directives.html">Yönergeler</a> | <a href="http://wiki.apache.org/httpd/FAQ">SSS</a> | <a href="/glossary.html">Terimler</a> | <a href="/sitemap.html">Site Haritası</a></p>
18<p class="apache">Apache HTTP Sunucusu Sürüm 2.4</p>
19<img alt="" src="/images/feather.gif" /></div>
20<div class="up"><a href="./"><img title="&lt;-" alt="&lt;-" src="/images/left.gif" /></a></div>
21<div id="path">
22<a href="http://www.apache.org/">Apache</a> &gt; <a href="http://httpd.apache.org/">HTTP Sunucusu</a> &gt; <a href="http://httpd.apache.org/docs/">Belgeleme</a> &gt; <a href="./">Sürüm 2.4</a></div><div id="page-content"><div id="preamble"><h1>Devingen Paylaşımlı Nesne Desteği</h1>
23<div class="toplang">
24<p><span>Mevcut Diller: </span><a href="/en/dso.html" hreflang="en" rel="alternate" title="English">&nbsp;en&nbsp;</a> |
25<a href="/fr/dso.html" hreflang="fr" rel="alternate" title="Français">&nbsp;fr&nbsp;</a> |
26<a href="/ja/dso.html" hreflang="ja" rel="alternate" title="Japanese">&nbsp;ja&nbsp;</a> |
27<a href="/ko/dso.html" hreflang="ko" rel="alternate" title="Korean">&nbsp;ko&nbsp;</a> |
28<a href="/tr/dso.html" title="Türkçe">&nbsp;tr&nbsp;</a></p>
29</div>
30
31    <p>Apache HTTP Sunucusu modüler bir program olup, yönetici sadece bir
32      grup modül seçerek sunucuya işlevsellik ekleyebilir. Modüller, Devingen
33      Paylaşımlı Nesneler (DSO - Dynamic Shared Object) halinde
34      <code class="program"><a href="/programs/httpd.html">httpd</a></code> programından ayrı olarak derlenir. DSO modülleri
35      sunucunun derlenmesi sırasında derlenebileceği gibi ayrı olarak derlenip
36      daha sonra Apache Eklenti Aracı (Apache Extension Tool)
37      <code class="program"><a href="/programs/apxs.html">apxs</a></code> programı kullanılarak da sunucuya eklenebilir.</p>
38
39    <p>Bu belgede DSO modüllerinin kullanımının yanında teorisine de
40      değinilecektir.</p>
41  </div>
42<div id="quickview"><ul id="toc"><li><img alt="" src="/images/down.gif" /> <a href="#implementation">Gerçeklenim</a></li>
43<li><img alt="" src="/images/down.gif" /> <a href="#usage">Kullanım Özeti</a></li>
44<li><img alt="" src="/images/down.gif" /> <a href="#background">Artalan Bilgisi</a></li>
45<li><img alt="" src="/images/down.gif" /> <a href="#advantages">Getiriler ve Götürüler</a></li>
46</ul><ul class="seealso"><li><a href="#comments_section">Yorum</a></li></ul></div>
47<div class="top"><a href="#page-header"><img alt="top" src="/images/up.gif" /></a></div>
48<div class="section">
49<h2><a name="implementation" id="implementation">Gerçeklenim</a></h2>
50
51<table class="related"><tr><th>İlgili Modüller</th><th>İlgili Yönergeler</th></tr><tr><td><ul><li><code class="module"><a href="/mod/mod_so.html">mod_so</a></code></li></ul></td><td><ul><li><code class="directive"><a href="/mod/mod_so.html#loadmodule">LoadModule</a></code></li></ul></td></tr></table>
52
53    <p>Apache httpd modüllerini yüklemek için DSO desteği, Apache httpd
54      çekirdeğine durağan olarak ilintilenerek derlenmiş olan
55      <code class="module"><a href="/mod/mod_so.html">mod_so</a></code> adında bir modül tarafından sağlanır.
56      <code class="module"><a href="/mod/core.html">core</a></code> modülünden  başka, bir DSO modülü olamayan tek modül
57      <code class="module"><a href="/mod/mod_so.html">mod_so</a></code> modülüdür. Apache ile dağıtılan hemen hemen tüm
58      diğer Apache modülleri bir DSO modülüne yerleştirilebilir. Derlenmiş
59      modüller <code>mod_filanca.so</code> biçeminde birer DSO ismi alırlar ve
60      her biri istenirse <code>httpd.conf</code> dosyasında
61      <code class="module"><a href="/mod/mod_so.html">mod_so</a></code> modülünün <code class="directive"><a href="/mod/mod_so.html#loadmodule">LoadModule</a></code> yönergesiyle belirtilerek sunucu başlatılırken
62      veya yeniden başlatılırken sunucuya yüklenebilir.</p>
63
64    <p><a href="install.html">Kurulum belgesinde</a> açıklandığı gibi, her DSO
65      modülü <code class="program"><a href="/programs/configure.html">configure</a></code> programının
66      <code>--enable-mods-static</code> seçeneği ile devredışı bırakılabilir.</p>
67
68    <p>Apache httpd modülleri için (özellikle üçüncü parti modüller için) DSO
69      dosyası üretimini kolaylaştırmak amacıyla <code class="program"><a href="/programs/apxs.html">apxs</a></code>
70      (<dfn>APache eXtenSion</dfn>) adında yeni bir destek programı
71      kullanılmaktadır. Bu program Apache httpd modüllerini Apache httpd kaynak
72      ağacından ayrı olarak derlemek için kullanılabilir. Fikir basittir: Apache
73      HTTP Sunucusu derlenirken DSO dosyalarını derlemek için platforma bağımlı
74      derleyici ve ilintileyici seçenekleri <code class="program"><a href="/programs/apxs.html">apxs</a></code>
75      programının içine konur ve <code>make install</code> ile kurulum sırasında
76      Apache httpd C başlık dosyaları da kurulur. Böylece
77      kullanıcı Apache httpd dağıtımının kaynak ağacına ihtiyaç duymadan ve
78      platforma bağımlı derleyici ve ilintileyici seçeneklerini bilmek zorunda
79      kalmadan istediği Apache httpd modülünü <code class="program"><a href="/programs/apxs.html">apxs</a></code>
80      programını kullanarak derleyebilir.</p>
81</div><div class="top"><a href="#page-header"><img alt="top" src="/images/up.gif" /></a></div>
82<div class="section">
83<h2><a name="usage" id="usage">Kullanım Özeti</a></h2>
84
85    <p>Apache HTTP Sunucusu 2.x’in DSO özelliklerine bir giriş olarak burada
86      kısaca bir bilgi vermekle yetinilecektir:</p>
87
88    <ol>
89      <li><p>Kaynak dosyası <code>mod_filanca.c</code> dosyasında dağıtılan bir
90        <em>özgün</em> Apache htpd modülünü <code>mod_filanca.so</code> isminde
91        bir  DSO modülü olarak derlemek ve kurmak için şöyle yapılır:</p>
92
93<div class="example"><p><code>
94  $ /configure --prefix=/kurulum/yeri --enable-filanca<br />
95  $ make install
96</code></p></div>
97      </li>
98
99      <li><p>Apache HTTP Sunucusunu tüm modüller etkin olarak
100        derleyebilirsiniz. Fakat sunucunun başlatılması sırasında sadece temel
101        modüller yüklenir.  Daha sonra <code>httpd.conf</code> içindeki
102        <code class="directive"><a href="/mod/mod_so.html#loadmodule">LoadModule</a></code> yönergelerini etkin
103        veya etkisiz hale getirerek yüklenecek modülleri
104        değiştirebilirsiniz.</p>
105
106<div class="example"><p><code>
107$ /configure --enable-mods-shared=all<br />
108$ make install
109</code></p></div>
110      </li>
111
112      <li><p>Bazı modüller sadece geliştiriciler içindir ve bunlar tüm
113        modüllerin derlenmesini (<em>all</em>) seçseniz bile derlenmeyecektir.
114        Geliştirici modülleri dehil tüm modülleri derlemek isterseniz
115        <em>reallyall</em> kullanınız. Ek olarak, derlenmiş modüller için
116        kullanılan <code class="directive"><a href="/mod/mod_so.html#loadmodule">LoadModule</a></code>
117        yönergelerinin tamamını <code>--enable-load-all-modules</code> derleme
118        seçeneği ile etkin kılabilirsiniz.</p>
119
120<div class="example"><p><code>
121$ /configure --enable-mods-shared=reallyall --enable-load-all-modules<br />
122$ make install
123</code></p></div>
124      </li>
125
126      <li><p>Kaynak dosyası <code>mod_filanca.c</code> dosyasında dağıtılan bir
127        <em>üçüncü parti</em> Apache httpd modülü <code>mod_filanca.so</code>
128        isminde bir DSO modülü olarak Apache httpd kaynak ağacının dışında
129        <code class="program"><a href="/programs/apxs.html">apxs</a></code> kullanarak derlemek ve kurmak için şöyle
130        yapılır:</p>
131
132<div class="example"><p><code>
133$ cd /bir/kurulum/yeri<br />
134$ apxs -c mod_filanca.c<br />
135$ apxs -aci filanca mod_filanca.la
136</code></p></div>
137      </li>
138    </ol>
139
140    <p>Tüm durumlarda derlenen paylaşımlı modülü Apache httpd’nin etkin
141      kılabilmesi  için <code>httpd.conf</code> dosyasında o modül için bir
142      <code class="directive"><a href="/mod/mod_so.html#loadmodule">LoadModule</a></code> yönergesi
143      bulunmalıdır.</p>
144
145    <p>Ayrıntılı bilgi için <a href="programs/apxs.html">apxs belgelerine</a>
146      bakınız.</p>
147</div><div class="top"><a href="#page-header"><img alt="top" src="/images/up.gif" /></a></div>
148<div class="section">
149<h2><a name="background" id="background">Artalan Bilgisi</a></h2>
150
151    <p>Günümüzün Unix türevlerinde var olan bir mekanizma sayesinde
152      çalıştırılabilir bir programın adres uzayına çalışma anında yüklenmek
153      veya ilintilenmek üzere <em>Devingen Paylaşımlı Nesneler</em> (DSO -
154      Dynamic Shared Object) adı verilen, özel bir biçem kullanarak kodlanmış
155      program parçaları oluşturulabilir.</p>
156
157    <p>Bu yükleme normalde iki yolla yapılabilir: Ya çalıştırılabilir
158      programın başlatılması sırasında yüklenen <code>ld.so</code> adlı bir
159      sistem programınının devingen olarak yüklenmesi ile ya da
160      çalıştırılabilir programın içinden Unix yükleyicisine programsal sistem
161      arayüzü sağlayan <code>dlopen()/dlsym()</code> sistem çağrılarının elle
162      yapılması suretiyle.</p>
163
164    <p>İlk yöntemde kullanılan DSO’lara genelde <em>paylaşımlı
165      kütüphaneler</em> veya <em>DSO kütüphaneleri</em> adı verilir ve
166      bunların dosyaları <code>libfilanca.so</code> veya
167      <code>libfilanca.so.1.2</code> biçiminde isimlendirilir. Belli bir
168      sistem dizininde (normalde <code>/usr/lib</code>) bulunurlar ve derleme
169      sırasında ilintileyici komutuna <code>-lfilanca</code> şeklinde
170      belirtilerek çalıştırılabilir programla ilintilenirler. Doğrudan
171      çalıştırılabilir koda eklenen bu kodlar Unix yükleyicisinin programın
172      başlatılması sırasında kütüphaneyi <code>/usr/lib</code> altında
173      <code>libfilanca.so</code> adıyla bulabilmesini sağlar. Kütüphanelerin
174      aranacağı yerler ya <code>-R</code> gibi bir ilintileyici seçeneği ile
175      koda eklenir ya da arama yolları <code>LD_LIBRARY_PATH</code> ortam
176      değişkeni aracılığıyla yapılandırılır. Böylece çalıştırılabilir
177      programda henüz çözümlenmemiş simgeler DSO içinde bulunarak
178      çözümlenebilir.</p>
179
180    <p>Çalıştırılabilir program içindeki simgelere normalde DSO içinden
181      atıfta bulunulmaz (genel kod kütüphanesinin başka programlarca da
182      kullanılması nedeniyle). Bu bakımdan DSO tarafında böyle bir çözümleme
183      yapılmaz. Çalıştırılabilir program da DSO’daki simgeleri kendisi
184      çözümlemeye uğraşmaz, bu işlemlerden tamamen Unix yükleyicisi
185      (<code>ld.so</code>) sorumludur. (Aslında, <code>ld.so</code>’yu
186      çağıracak kod, her çalıştırılabilir programın içine ilintilenmiş
187      (durağan değil) başlatma kodunun bir parçasıdır.) Programlar tarafından
188      ortaklaşa kullanılan kütüphanelerin devingen olarak yüklenmesinin sebebi
189      basittir: Kütüphane kodu <code>libc.so</code> gibi bir sistem
190      kütüphanesine bir kere kaydedilip disk alanından yer kazanılmış
191      olur.</p>
192
193    <p>İkinci yöntemde kullanılan DSO’lara yine <em>paylaşımlı
194      kütüphaneler</em> veya <em>DSO kütüphaneleri</em> adı verilir fakat
195      bunların dosyaları geçerli kabule göre <code>filanca.so</code> gibi
196      isimlendirilse de genelde keyfi olarak seçilen bir dosya uzantısı
197      kullanılarak isimlendirilirler. Bu dosyalar genellikle programa özel bir
198      dizinde dururlar ve bu dosyaları kullanacak olan çalıştırılabilir
199      programla aralarında özdevimli olarak bağ kurulmamıştır. Bunun yerine,
200      çalıştırılabilir program DSO’yu çalışma anında <code>dlopen()</code>
201      sayesinde kendi adres uzayına ekler. Çalıştırılabilir program için
202      DSO’daki simgeler bu sırada çözümlenmez. Özdevimli olarak devreye
203      giren Unix yükleyicisi, (varsa) artakalan simgeleri, çalıştırılabilir
204      ihraç edilen simge kümelerini (ve özellikle her yerde hazır ve nazır
205      <code>libc.so</code> içindeki tüm simgeleri) kullanarak çözümler. Bu
206      yolla DSO, çalıştırılabilir programın simge kümesi bilgilerini sanki
207      kendisine baştan durağan olarak ilintilenmiş gibi ulaşabilir.</p>
208
209    <p>Son olarak, DSO’nun programlama arayüzünün getirilerinden yararlanmak
210      amacıyla çalıştırılabilir program, daha sonra dağıtım tabloları vb.
211      yerlerde kullanmak üzere <code>dlsym()</code> üzerinden DSO’daki belli
212      simgeleri çözümlemek zorundadır. Başka bir deyişle: Çalıştırılabilir
213      program ihtiyaç duyduğu her simgeyi kullanmak için kendisi çözümleme
214      yapmak zorundadır. Böyle bir mekanizmanın getirisi, programın isteğe
215      bağlı parçalarının gerekli olana kadar yüklenmemesidir (böylece daha az
216      bellek alanı kullanılır). Gerektiği zaman programın işlevselliğini
217      arttırmak amacıyla bu parçalar devingen olarak programa
218      yüklenebilir.</p>
219
220    <p>DSO mekanizmasının bu basit gibi görünen işleyişinde zorluk içeren bir
221      adım şudur (başkaları da olabilir): Bir programın işlevselliğini
222      genişletmek için DSO kullanılırken (ikinci yöntem) çalıştırılabilir
223      programdan DSO için simgelerin çözümlenmesi.  Zorluğun sebebi,
224      "tersine çözümleme" yapılmasıdır; çalıştırılabilir programın simge
225      kümesindeki DSO simgeleri kütüphane tasarımına aykırı bir şekilde
226      çözümlenir ve bu uygulama tüm platformlarda hazır olarak
227      desteklenmediği gibi standartlaşmış da değildir. Geçer uygulamada
228      çalıştırılabilir programın evrensel simgeleri çoğunlukla yeniden dışa
229      verilmez ve bu bakımdan bir DSO içinde kullanılmaları uygun değildir.
230      Esas sorun, çalıştırılabilir bir programın işlevselliğini çalışma
231      anında genişletmek için DSO kullanımı sırasında ilintileyicinin tüm
232      evrensel simgeleri dışa vermesini zorlamanın bir yolunu bulmaktır.</p>
233
234    <p>Paylaşımlı kütüphane yaklaşımı bu bakımdan türünün tek örneğidir,
235      çünkü DSO mekanizması özellikle bunun için tasarlanmıştır, dolayısıyla
236      işletim sisteminin sağladığı hemen hemen tüm kütüphaneler için
237      kullanılabilir.</p>
238</div><div class="top"><a href="#page-header"><img alt="top" src="/images/up.gif" /></a></div>
239<div class="section">
240<h2><a name="advantages" id="advantages">Getiriler ve Götürüler</a></h2>
241
242    <p>Yukarıda bahsedilen DSO’ya dayalı özelliklerin getirileri
243      şunlardır:</p>
244
245    <ul>
246      <li>Sunucu paketi çalışma anında daha esnektir çünkü, sunucuyu
247        oluşturan parçalar derleme sırasında <code class="program"><a href="/programs/configure.html">configure</a></code>
248        seçenekleriyle birleştirilmek yerine <code>httpd.conf</code> içinde
249        <code class="directive"><a href="/mod/mod_so.html#loadmodule">LoadModule</a></code> yönergeleri
250        sayesinde çalışma anında birleştirilebilmektedir. Bu yolla, örneğin
251        tek bir Apache kurulumuyla birbirinden farklı yapılandırmalara sahip
252        çok sayıda sunucu çalıştırmak mümkündür. (standart veya SSL sürümü;
253        basitleştirilmiş veya devingen sürümü [mod_perl, PHP3], vs.)</li>
254
255      <li>Sunucu paketi kurulumdan sonra bile üçüncü parti modüllerle kolayca
256        genişletilebilir. Bu özellikle, bir Apache temel paketinin yanında
257        PHP, mod_perl, mod_security gibi ek paketler oluşturan paket
258        dağıtıcılarına büyük yarar sağlar.</li>
259
260      <li>Yeni Apache httpd modülleri için daha kolay prototip
261        geliştirilebilir: Modül kaynak kodunu DSO/<code class="program"><a href="/programs/apxs.html">apxs</a></code> çifti
262        sayesinde Apache httpd kaynak ağacının dışında derleyip modülün yeni
263        bir sürümünü bir <code>apxs -i</code> komutunun ardından
264        <code>apachectl restart</code> yaparak çalışan bir Apache HTTP
265        Sunucusunda denemek daha kolay hale getirilmiştir.</li>
266    </ul>
267
268    <p>DSO kullanımının götürüleri ise şunlardır:</p>
269
270    <ul>
271      <li>İlk yüklemede %20 yavaşlama: Unix yükleyicisi simgeleri çözümlemek
272        zorunda olduğundan sunucu ilk başlatılırken yaklaşık %20 daha yavaş
273        faaliyete geçer.</li>
274
275      <li>Çalışma sırasında % 5 yavaşlama: Konumdan bağımsız kodun (PIC -
276        Position Independent Code) göreli adresleme için karmaşık oyunlara
277        girmesi ve bunun mutlak adresleme kadar hızlı olmaması nedeniyle
278        sunucu bazı platformlarda çalışma anında yaklaşık %5 daha yavaş
279        çalışabilir.</li>
280
281      <li>DSO'nun tüm modüller için uygun olmaması: DSO modülleri bazı
282        platformlarda diğer DSO temelli kütüphanelerle ilintilenemediğinden
283        (<code>ld -lfilanca</code>) DSO mekanizmasını tüm modül türleri için
284        kullanamazsınız (örneğin a.out temelli platformlar bu işlevselliği
285        ELF temelli platformlar kadar iyi sağlamaz). Başka bir deyişle, DSO
286        dosyaları olarak derlenmiş modüllerin kullanabileceği simgeler ya
287        Apache httpd temel kodunda vardır ya Apache httpd temel kodunun
288        kullandığı C kütüphanesinde (<code>libc</code>) ve diğer durağan ve
289        devingen kütüphanelerde vardır ya da konumdan bağımsız kodu içeren
290        durağan kütüphane arşivlerinde (<code>libfilanca.a</code>)
291        vardır. Diğer modülleri kullanmak için tek şansınız ya Apache httpd
292        çekirdeğinin modüle bir atıf içermesini sağlamak ya da modül kodunu
293        <code>dlopen()</code> vasıtasıyla yüklemektir.</li>
294    </ul>
295
296</div></div>
297<div class="bottomlang">
298<p><span>Mevcut Diller: </span><a href="/en/dso.html" hreflang="en" rel="alternate" title="English">&nbsp;en&nbsp;</a> |
299<a href="/fr/dso.html" hreflang="fr" rel="alternate" title="Français">&nbsp;fr&nbsp;</a> |
300<a href="/ja/dso.html" hreflang="ja" rel="alternate" title="Japanese">&nbsp;ja&nbsp;</a> |
301<a href="/ko/dso.html" hreflang="ko" rel="alternate" title="Korean">&nbsp;ko&nbsp;</a> |
302<a href="/tr/dso.html" title="Türkçe">&nbsp;tr&nbsp;</a></p>
303</div><div class="top"><a href="#page-header"><img src="/images/up.gif" alt="top" /></a></div><div class="section"><h2><a id="comments_section" name="comments_section">Yorum</a></h2><div class="warning"><strong>Notice:</strong><br />This is not a Q&amp;A section. Comments placed here should be pointed towards suggestions on improving the documentation or server, and may be removed again by our moderators if they are either implemented or considered invalid/off-topic. Questions on how to manage the Apache HTTP Server should be directed at either our IRC channel, #httpd, on Freenode, or sent to our <a href="http://httpd.apache.org/lists.html">mailing lists</a>.</div>
304<script type="text/javascript"><!--//--><![CDATA[//><!--
305var comments_shortname = 'httpd';
306var comments_identifier = 'http://httpd.apache.org/docs/2.4/dso.html';
307(function(w, d) {
308    if (w.location.hostname.toLowerCase() == "httpd.apache.org") {
309        d.write('<div id="comments_thread"><\/div>');
310        var s = d.createElement('script');
311        s.type = 'text/javascript';
312        s.async = true;
313        s.src = 'https://comments.apache.org/show_comments.lua?site=' + comments_shortname + '&page=' + comments_identifier;
314        (d.getElementsByTagName('head')[0] || d.getElementsByTagName('body')[0]).appendChild(s);
315    }
316    else { 
317        d.write('<div id="comments_thread">Comments are disabled for this page at the moment.<\/div>');
318    }
319})(window, document);
320//--><!]]></script></div><div id="footer">
321<p class="apache">Copyright 2014 The Apache Software Foundation.<br /><a href="http://www.apache.org/licenses/LICENSE-2.0">Apache License, Version 2.0</a> altında lisanslıdır.</p>
322<p class="menu"><a href="/mod/">Modüller</a> | <a href="/mod/directives.html">Yönergeler</a> | <a href="http://wiki.apache.org/httpd/FAQ">SSS</a> | <a href="/glossary.html">Terimler</a> | <a href="/sitemap.html">Site Haritası</a></p></div><script type="text/javascript"><!--//--><![CDATA[//><!--
323if (typeof(prettyPrint) !== 'undefined') {
324    prettyPrint();
325}
326//--><!]]></script>
327</body></html>