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