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="<-" alt="<-" src="/images/left.gif" /></a></div> 21<div id="path"> 22<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.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"> en </a> | 25<a href="/fr/dso.html" hreflang="fr" rel="alternate" title="Français"> fr </a> | 26<a href="/ja/dso.html" hreflang="ja" rel="alternate" title="Japanese"> ja </a> | 27<a href="/ko/dso.html" hreflang="ko" rel="alternate" title="Korean"> ko </a> | 28<a href="/tr/dso.html" title="Türkçe"> tr </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"> en </a> | 299<a href="/fr/dso.html" hreflang="fr" rel="alternate" title="Français"> fr </a> | 300<a href="/ja/dso.html" hreflang="ja" rel="alternate" title="Japanese"> ja </a> | 301<a href="/ko/dso.html" hreflang="ko" rel="alternate" title="Korean"> ko </a> | 302<a href="/tr/dso.html" title="Türkçe"> tr </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&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>