什么可以误诊为畸胎瘤| 略略略是什么意思| 中期唐氏筛查查什么| 黄瓜与什么相克| icloud是什么| 虾滑可以做什么菜| 右鼻子经常出血是什么原因| 人生座右铭是什么意思| 腺病是什么意思| ch2o是什么物质| 定义是什么| 蝉联的意思是什么| 双氯芬酸钠缓释片是什么药| ppd是什么| 海螺什么地方不能吃| lord什么意思| 为什么不敢挖雍正陵墓| 咖啡什么牌子的好| 姓卢的男孩起什么名字好| 神经性头痛吃什么药效果好| 老想喝水是什么原因| 山的五行属什么| 1月22日是什么星座| 看静脉曲张挂什么科| 番茄是什么时候传入中国的| 土豆是什么科| 什么样的女人旺夫| 阑尾炎什么症状| 紧急避孕药吃了有什么副作用| 小孩查微量元素挂什么科| 调虎离山是什么意思| 处女座前面是什么星座| 憋不住大便是什么原因造成的| 蜱虫咬人后有什么症状| 食品科学与工程学什么| 右眼皮上长痣代表什么| 高锰酸钾有什么作用| 孕妇感冒吃什么药| 胶原蛋白是什么| 胰子是什么意思| 手指甲变黑是什么原因| 炎症吃什么药| 足下生辉是什么意思| 阑尾是什么| 救济的近义词是什么| 厚颜无耻是什么生肖| 手热脚热是什么原因| 荡秋千有什么好处| 打完升白针有什么反应| 占位性病变是什么意思| 吃什么补内膜最快| 尿检隐血弱阳性是什么意思| dw手表是什么档次| 狗狗胰腺炎吃什么药| 什么的事物| 肉筋是什么| 毅力是什么意思| 老打嗝什么原因| 嗓子总有痰吃什么药| 含金量什么意思| 属鸡的和什么属相最配| 十一月份什么星座| 情绪不稳定是什么原因| 南笙是什么意思| 10度左右穿什么衣服合适| 鸭蛋炒什么好吃| 为什么有些人怎么吃都不胖| 早日康复送什么花| 脾大是什么原因造成的怎么治疗| 竹字头均念什么名字| 梦见搬家是什么预兆| 什么是地包天牙齿| 荔枝不能和什么一起吃| 服软是什么意思| 老鼠爱吃什么食物| 人生百味下一句是什么| 什么是象声词| 三点水的字有什么| 上火牙齿痛吃什么药| md是什么学位| 一什么方向| 中筋面粉适合做什么| 为什么会基因突变| 紫外线过敏什么症状| 缅怀是什么意思| apf是什么意思| 运动减肥为什么体重不减反增| 乾隆为什么长寿| 乐字五行属什么| 脾虚痰湿吃什么中成药| 天无二日指什么生肖| 小美女是什么意思| 风寒咳嗽吃什么药| 有趣的什么填空| 检查生育能力挂什么科| 毛囊长什么样子| 为什么会打雷| 哺乳期可以吃什么水果| mchc是什么意思| 糖耐是什么| 西柚是什么意思| puma是什么品牌| 11月1日什么星座| 化作风化作雨是什么歌| 左眼皮老跳是什么原因| 什么充电宝可以带上飞机| 春风十里不如你什么意思| 随餐服用是什么意思| 乙巳年是什么命| 干巴爹什么意思| 七点到九点是什么时辰| 真言是什么意思| 女性肾虚吃什么补最好最快| 为什么想到一个人会心痛| 嘴角发麻是什么病前兆| 强肉弱食是什么意思| 天池为什么没有鱼| 来月经吃什么好| 岳飞属什么生肖| 蜈蚣最怕什么药| 为什么会长牙结石| 提拉米苏是什么意思| mr什么意思| 洋地黄中毒首选什么药| 回不到我们的从前是什么歌| 体检挂什么科室| 脚气挂什么科室| 377是什么意思| 活血是什么意思| 梨状肌综合症吃什么药| 舞美是什么| 隐睾是什么意思| 头晕头痛吃什么药| 乳头大是什么原因| 三月是什么星座| 国防部长是什么级别| 什么是袖珍人| 白球比例偏高说明什么| 下腹部胀是什么原因| 孕晚期脚肿是什么原因| 血液肿瘤是什么病| 阿尔兹海默症挂什么科| 6月16日是什么日子| 胃疼吃什么好| 臻字五行属什么的| 休克疗法是什么意思| 心率过速吃什么药| 一什么彩虹| 接济是什么意思| 什么方什么计| 无名指是什么经络| 为什么前壁容易生男孩| 癫疯是什么原因引起| 河南古代叫什么| 心脏房颤吃什么药| 长痘痘吃什么水果好| 为什么最迷人的最危险是什么歌| 四大美女指什么生肖| 怀孕第一个月最怕什么| 属鸡在脖子上戴什么好| 舒字属于五行属什么| 牙龈萎缩是什么原因| 公安局属于什么机关| 蛋白质变性的本质是什么| miniso是什么意思| 痔疮吃什么药好得快| 天煞孤星是什么意思| 少年班是什么意思| jbp什么意思| KTV服务员主要做什么| 血象高是什么意思| 霸屏是什么意思| 堃怎么读什么意思| o型阴性血是什么意思| 脱发去医院挂什么科| 据悉是什么意思| 苏铁属于什么植物| 女人肾虚是什么原因| 腿弯处的筋痛是什么原因| 尿酸高吃什么食物最好| 口水多是什么原因引起的| c2是什么| 吃阿胶有什么好处| 腮腺炎什么症状| 迪化是什么意思| 血管炎吃什么药最有效| 嘴巴经常长溃疡是什么原因| 黄芪最佳搭配是什么| 孕妇贫血吃什么好| 最大的淡水湖是什么湖| 中国文字博大精深什么意思| 尿检白细胞阳性是什么意思| 菌群失调是什么意思| 晴字五行属什么| 什么是电信诈骗| 落枕吃什么药| 皮皮虾吃什么| 毛重是什么| ped是什么意思| 熬夜 吃什么| 人什么地灵| 跳蛋什么意思| 穿什么颜色衣服显白| 蓬头垢面是什么意思| 什么是桥本氏甲状腺炎| 吃什么补充膝盖润滑液| 面肌痉挛挂什么科| 咳嗽不能吃什么| 离岸人民币什么意思| 皮肤瘙痒吃什么药| 29是什么生肖| 1.19是什么星座| 拉肚子是什么原因造成的| 龙配什么生肖最好| molly英文名什么意思| 无精打采是什么意思| 做爱为什么那么舒服| 辣条是什么意思| m标志是什么牌子衣服| 摄影三要素是什么| 孩子急性肠胃炎吃什么药| 朱代表什么生肖| 名什么什么实| 什么是亚麻籽油| 颈椎钙化是什么意思| 新生儿一直哭闹是什么原因| 总是困是什么原因| 东窗事发是什么意思| 炸毛是什么意思| 布洛芬的副作用是什么| 菠萝与凤梨有什么区别| 为什么的拼音怎么写| 油嘴滑舌是什么意思| 钴蓝色是什么颜色| 糖醋排骨是什么菜系| 孕妇吃什么血糖降得快| 今年什么时候进入伏天| 吃什么可以变白| 头伏饺子二伏面三伏吃什么| 梦见看电影是什么意思| 93年属相是什么| 疳积有什么症状| tpp是什么意思| 嗓子痛吃什么药好得快| 积滞是什么意思| 孕妇oct是什么检查| 双重所有格是什么意思| 晨勃消失是什么原因| 五味子不适合什么人喝| 血糖高能吃什么蔬菜| 老是吐口水是什么原因| 卵泡刺激素高说明什么| 7月17日什么星座| 龟头是什么| 封建迷信是什么| 粉丝是什么做的| 肝囊性灶是什么意思| 感冒了吃什么食物最好| 阳朔有什么好玩的| 江诗丹顿属于什么档次| 季字五行属什么| 熬夜为什么会胖| 烫伤用什么药好| 睡觉爱做梦是什么原因| 百度Zum Inhalt springen

“三下乡”让西丰 群众家门口享福利

aus Wikipedia, der freien Enzyklop?die
百度 与此同时,积极推动横店通用机场转型升级,厚植发展优势。

Eine Programmbibliothek (kurz Bibliothek; englisch library, kurz lib) bezeichnet in der Programmierung eine Sammlung von Unterprogrammen/-routinen, die L?sungswege für thematisch zusammengeh?rende Problemstellungen anbieten. Bibliotheken sind im Unterschied zu Programmen keine eigenst?ndig lauff?higen Einheiten, sondern sie enthalten Hilfsmodule, die von Programmen angefordert werden.

In erweitertem Sinn gelten als Programmbibliotheken (zum Teil auch ?Komponentenbibliothek“ oder ?Klassenbibliothek“ genannt) alle Arten von Bibliotheken, die Programmcode(-bestandteile) bereitstellen/enthalten. Insofern unterscheidet man Programmbibliotheken u. a. nach dem Typ des Programmcodes, z. B. Quelltexte, Makros, Object- oder Bytecode, Maschinencode usw. Dementsprechend werden Bibliotheken zu unterschiedlichen Zeitpunkten benutzt, manche nur im Rahmen der Softwareentwicklung (von Werkzeugen der Entwicklungsumgebung), andere nur zur Ausführung von Programmen, wieder andere als Mischform von beiden. Solche Bibliotheken enthalten h?ufig nicht nur Unterprogramme, sondern Programmcodeteile aller Programm-Typen.

Eine besondere Form von Programmbibliotheken sind Frameworks.

M?gliche Zugriffe auf Funktionen einer Programmbibliothek sind durch die Programmierschnittstelle (API) definiert. Dabei handelt es sich um die Gesamtheit der ?ffentlich verfügbaren Funktionen und Klassen; in Abgrenzung zu den privaten Einheiten der Bibliothek, die nicht zug?nglich sind.

Manche propriet?ren Programmbibliotheken werden nicht im Quelltext ver?ffentlicht, da sie Firmengeheimnisse darstellen. Zum Schutz gegen Dekompilieren wird dann oft ein Obfuscator eingesetzt sowie alle Symbole (Variablen- und Sprungadressnamen) entfernt.

Speicherungsformen

[Bearbeiten | Quelltext bearbeiten]

Programmbibliotheken und ihre Inhalte k?nnen, abh?ngig vom Betriebssystem und der Entwicklungsumgebung, in unterschiedlichen Formen und Strukturen gespeichert werden, zum Beispiel:

  • Die Bibliothek ist ein Dateiverzeichnis, a ihre Elemente/Komponenten sind einzelne Dateien. a
  • Die Bibliothek ist eine Datei, a die darin enthaltenen Komponenten werden von den Programmen der Entwicklungsumgebung oder einer speziellen Bibliotheksverwaltungssoftware identifiziert und verarbeitet.
Beispiele: Eine sogenannte 'DLL' bei Microsoft oder eine PO-Datei bei IBM-Gro?rechnern als Bibliothek für Quelltexte, Objektmodule oder ausführbare Lademodule.
  • Unterschiedliche Arten von Bibliotheken werden in einer gemeinsamen Datei a verwaltet, die Entwicklungsumgebung kann dies unterscheiden/verarbeiten. Beispiel: Eine 'MDB' bei MS Access enth?lt Bibliotheken mit Quellcode, Makros, vorübersetztem Pseudocode und anderen Codetypen.
  • Es existiert keine ?Bibliothek‘, die Komponenten werden als einzelne Dateien gespeichert und ausgeführt, z. B. als ?EXE-Dateien“.
a 
verwaltet vom üblichen Dateiverwaltungssystem des Betriebssystems

Statische Bibliotheken

[Bearbeiten | Quelltext bearbeiten]

?Statische Bibliothek“ wird eine Programmbibliothek genannt, die Module/Unterprogramme enth?lt, die durch einen so genannten Linker (von englisch ?to link“: verknüpfen) mit dem Kompilat eines anderen Programms verbunden werden. Dabei erzeugt der Linker, in der Regel für ein Hauptprogramm, eine ausführbare Datei oder (je nach Betriebssystem) ein Lademodul in einer Ladebibliothek, in der die von diesem aufgerufenen Module fest (statisch) eingebunden/angeh?ngt sind.

Ein optimierender Linker sucht aus den zugeordneten Objekt-Modulen (Bibliotheksdateien) nur jene Komponenten (Unterprogramme oder Daten) heraus, die vom Programm auch tats?chlich aufgerufen (referenziert) werden (und für die es im Programm keine überschreibende Implementierung gibt) und h?ngt sie dann an das Programm an. Die so entstehende Datei wird entsprechend gr??er. Einfache Linker fügen einfach das komplette Objekt-Modul bzw. die komplette Bibliothek hinzu und vergr??ern das Programm dadurch noch mehr.

Eine statische Bibliothek ist im Allgemeinen selbst Ergebnis aus Quelltexten, aufgeteilt in mehrere Module, deren Kompilate (Objektmodule) dann vom Linker zu der Bibliothek zusammengefügt wurden.

Kommerzielle Anbieter von Frameworks, die den Quellcode ihrer Funktionen nicht offenlegen m?chten, stellen diese den Entwicklern üblicherweise in Form von statischen Bibliotheken und den zugeh?rigen Header-Dateien bereit. Dadurch haben Software-Entwickler die M?glichkeit, die gebotenen Funktionen in ihren Programmen zu verwenden und in Bin?rform in ihre Programme einzubauen, ohne dass neben den Definitionen der Quellcode der Funktionen vorliegen muss.

Hardware-Hersteller, die ihre Schnittstellen nicht offenlegen m?chten, bieten durch die Bereitstellung statischer Bibliotheken eine M?glichkeit, um Treiber für neue Betriebssystem-Kernel bereitzustellen, ohne selbst bei Updates t?tig werden zu müssen. Damit ist es beispielsweise auf Linux-Systemen mit Hilfe vom DKMS m?glich, Kernel-Module zu bauen, die die Anforderungen der gegebenen Kernel-Version erfüllen, ohne dass der komplette Quellcode vorliegen muss. Dies betrifft u. a. die Grafiktreiber von NVIDIA.

Dynamische Bibliotheken

[Bearbeiten | Quelltext bearbeiten]

Aus dynamischen Bibliotheken werden Komponenten erst w?hrend der Laufzeit eines Programms über einen sogenannten Lader in den Arbeitsspeicher geladen. Das geschieht entweder durch eine explizite Anweisung durch das Programm oder implizit durch einen so genannten Laufzeit-Lader, wenn das Programm dynamisch gebunden wurde. Heutzutage geschieht dies meist mit Betriebssystem-Unterstützung, da (siehe unten) dynamische Bibliotheken gesondert behandelt werden bzgl. Swapping und Einblendung in den Programm-Adressraum. Der Lader ist somit heute meist zu weiten Teilen eine Betriebssystem-Komponente.

Dynamisch gebundene Programme müssen sich um das Laden der ben?tigten dynamischen Komponenten nicht selbst kümmern. Beim dynamischen Binden werden Bibliothek und Kompilat nur lose verknüpft. Statt die notwendigen Symbole (Variablen- und Sprungadressnamen) zu kopieren, wie beim statischen Binden der Fall, werden sie nur referenziert. Um das Laden der dynamischen Bibliotheken und Suchen der Symbole kümmert sich ein sogenannter Laufzeit-Binder. Das Aufl?sen der referenzierten Symbole geschieht entweder sofort (noch vor Start des eigentlichen Programms bzw. beim Laden aus der Bibliothek) oder lazy (faul), bei der ersten Verwendung des Symbols.

Ein typischer Anwendungsfall dafür, Bibliotheken explizit zu ?ffnen (die Adresse von Symbolen nach deren Namen zu suchen, um das Symbol zu verwenden), sind Plug-in-Architekturen. Ein weiteres Szenario ist eine optionale Bibliothek, die verwendet wird, falls vorhanden, deren Fehlen aber keinen Fehler darstellt.

Ein Vorteil von dynamischen Bibliotheken ist, dass Programme, die eine dynamische Bibliothek verwenden, von Fehlerbehebungen in der Bibliothek profitieren, ohne neu übersetzt werden zu müssen. Wird beispielsweise ein Fehler in der OpenSSL-Bibliothek gefunden und behoben (die entsprechende Bibliothek wurde ersetzt), so genügt ein Neustart der Programme, die diese Bibliothek verwenden, um den Fehler auch in diesen Programmen zu beheben.

Da die Dateien, in denen dynamische Bibliotheken gespeichert werden, bei der Benutzung nur gelesen und ausgeführt, aber nicht ver?ndert werden, müssen Betriebssysteme mit virtuellem Speicher dynamische Bibliotheken nur einmal laden und k?nnen sie dann in den Adressraum aller verwendenden Prozesse einblenden. Dies ist beispielsweise bei Multitasking-Systemen vorteilhaft, wenn die Bibliotheken insgesamt sehr gro? sind und von vielen Prozessen gleichzeitig verwendet werden. (Sollte die dynamische Bibliothek Zust?nde oder gespeicherte Daten besitzen, kann dies mit Copy-On-Write abgefangen werden.)

Viele moderne Betriebssysteme laden die dynamischen Bibliotheken jedoch nicht sofort, sondern blenden sie bei Bedarf direkt von der Festplatte aus ein – sie werden wie ausgelagerte Pages behandelt. Analog werden nicht ben?tigte Pages, die zu einer dynamischen Bibliothek geh?ren und nicht ver?ndert wurden, einfach verworfen. Bei Bedarf k?nnen sie ja aus der Festplatte wieder geladen werden.

Programmbibliotheken stellen Komponenten in bestimmten Zusammenh?ngen bereit, zu denen sie bezüglich ihrer Konstruktion und ihrer Schnittstellen passen (müssen). Dementsprechend gibt es Programmbibliotheken zum Beispiel in folgenden Zusammenh?ngen:

Bibliotheken in verschiedenen Programmiersprachen

[Bearbeiten | Quelltext bearbeiten]

Bibliotheken in Programmiersprachen enthalten Dienste, die nicht im Compiler implementiert sind, sondern in der Sprache selbst programmiert sind und mit dem Compiler zusammen oder v?llig von ihm getrennt dem Programmierer zur Verfügung stehen. Im ersten Fall ist die Bibliothek meist in der Sprachbeschreibung festgelegt. Im zweiten Fall spricht man von einer externen Bibliothek.

In der Sprachbeschreibung festgelegte Bibliotheken unterscheiden sich teilweise stark im Umfang.

Sprache Teile/Pakete Header/Klassen Funktionen/Methoden/Konstruktoren
C (C89+Amendments) 1 18 142
C (C99) 1 24 482
C++ 1 32 + 18 (C89)
Java 2 (JDK 1.2) 62 1.287 ≈ 18.000
Java 6 202 3.850 21.881
.Net 1.0 41 3.581 35.470
.Net 1.1 43 3.818 37.556
.Net 2.0 51 7.419 74.607
.Net 3.0 80 10.639 102.613
.Net 3.5 98 11.417 109.657

Java ist eine eigene Plattform und verwendet ein Bibliothekskonzept, welches nicht an das Betriebssystem gebunden ist. Im Grunde wird nicht zwischen Programm und Bibliothek unterschieden. Alle Klassen liegen kompiliert in Form von .class-Dateien vor und werden bei Bedarf geladen. In der Regel sind Bibliotheken, wenn sie aus mehreren Klassen bestehen, in einem Java-Archiv zusammengefasst. Die Java-API selbst liegt ebenfalls in Form von Java-Archiven vor.

Da die einzelnen Klassen einer Bibliothek erst zur Laufzeit geladen werden, kann es bei der ersten Verwendung zu Verz?gerungen kommen, bis die Klasse geladen und initialisiert wurde. In Java für Echtzeitsysteme, aber auch in Java SE kann der Klassenlader durch entsprechende Methodenaufrufe bestimmte oder alle notwendigen Bibliotheken beim Starten laden und sie auch nicht mehr entladen, so dass bei der Benutzung keine unerwartete Verz?gerung entsteht.

Bibliotheken bei verschiedenen Betriebssystemen

[Bearbeiten | Quelltext bearbeiten]

Bei den Betriebssystemen Windows und OS/2 wird eine Bibliotheksdatei, die dynamisch bindet, als DLL (für Dynamic Link Library) bezeichnet. Entsprechend haben diese Dateien meist die Dateiendung .dll. Ihr Dateiformat ist New Executable (16 Bit), Linear Executable (32-Bit-OS/2) oder Portable Executable (32- bzw. 64-Bit-Windows).

Unter Windows wird zwischen mehreren Arten von DLLs unterschieden:

Einsprungs-DLLs enthalten hierbei Funktionen, w?hrend ActiveX-DLLs Klassen enthalten.

DLLs bis Windows 98 und Windows NT 4.0 k?nnen nicht kontrolliert werden – jedes Programm darf sie austauschen und kann dem Betriebssystem damit m?glicherweise Schaden zufügen. Windows Me, Windows 2000 und die Folgeversionen verfügen über einen Systemschutz, der auch die DLLs einbezieht.

Vorteile

  • Au?er Code k?nnen auch Daten (zum Beispiel Dialog-Ressourcen) von mehreren Prozessen gemeinsam genutzt werden.
  • DLLs werden h?ufig statisch verlinkt, k?nnen aber auch dynamisch verlinkt werden. Dynamisch hei?t hier, dass die DLL explizit vom Programm zur Laufzeit geladen wird und die Funktionen, die sich in der DLL befinden, ?per Hand“ mit dem Programm verbunden werden. Dadurch wird es m?glich, durch Austauschen der DLL die Funktionalit?t des Programms zur Laufzeit zu ver?ndern.
  • DLLs k?nnen unabh?ngig vom Hauptprogramm gewartet werden. Das hei?t, Funktionen in der DLL k?nnen ohne Wissen des Programms ver?ndert werden. Danach wird die DLL einfach ausgetauscht (die alte DLL-Datei wird überschrieben), ohne dass das Hauptprogramm ver?ndert werden muss.
  • Da die DLL als unabh?ngige Datei dem Hauptprogramm beiliegen muss, k?nnen Anbieter von Programmcode besser sicherstellen, dass Programmierer, die die Funktionen ihrer DLL nutzen, dafür auch bezahlen. Die Funktionalit?t der DLL verschwindet so nicht (wie bei einer Library) im Code des Programms. Dieser Vorteil wird von Befürwortern freier Software als Nachteil gesehen.

Nachteile

  • ?nderungen in DLLs ziehen oft auch ?nderungen im Programm nach sich. Dadurch kommt es leicht zu Versionskonflikten, die oft nur sehr schwer aufzuspüren sind. Eine der Grundideen der DLLs war, Programmcode zwischen mehreren Programmen zu teilen, um so Speicher zu sparen. In der Praxis ist es jedoch dazu gekommen, dass viele Programme bei der Installation DLLs in das Windows-Systemverzeichnis schreiben, die au?er diesem speziellen Programm kein anderes benutzen kann. Au?erdem ist die Entwicklung und insbesondere die Anbindung im Vergleich aufw?ndiger als zur statischen Bibliothek.
  • Praktisch hat dies jedoch keine Bedeutung mehr, da seit mindestens Windows 2000 die allermeisten Applikationen private Bibliotheken[1] mit ihrer Installation mitführen, also ein Versionskonflikt im Sinn eines DLL-Konflikts ausgeschlossen ist. Unter Windows haben Bibliotheken, die im Programmordner der Anwendung abgelegt sind, eine h?here Priorit?t als die systemweit verfügbaren.[2]

Unixartige Systeme

[Bearbeiten | Quelltext bearbeiten]

Auf unixartigen Betriebssystemen (wie z. B. Linux) verwenden statische Bibliotheken den Dateisuffix .a (von ?Archiv“) und k?nnen mit den UNIX-Programmen ar und nm angesehen und bearbeitet werden. Bei Systemen, die eine Paketverwaltung anbieten, befinden sich statische Bibliotheken oft zusammen mit den Header-Dateien in einem separaten Entwicklungs-Paket.

Für dynamische Bibliotheken ist die Bezeichnung shared library (englisch für ?gemeinsam genutzte Bibliothek“) gebr?uchlich. Sehr verbreitet ist das Executable and Linking Format (ELF), das Standard-Format unter anderem von Linux, FreeBSD und Solaris. Für diese Dateien hat sich die Endung .so (von shared object, ?gemeinsam genutztes Objekt“) etabliert. In der Regel folgt dem Bibliotheksnamen noch die Versionsnummer der Bin?rschnittstelle (ABI version), so dass mehrere Versionen einer Bibliothek gleichzeitig installiert sein k?nnen. Meta-Informationen zu einem vorliegenden .so k?nnen bspw. mit readelf abgefragt werden.

Shared libraries beginnen auf Linux (mit Ausnahme einiger Low-Level-Bibliotheken) üblicherweise mit dem Pr?fix ?lib“. Die eigentliche Bibliotheksdatei enth?lt die volle Versionsnummer. Symbolische Verknüpfungen erm?glichen den Zugriff über den so-Namen, sowie den Zugriff ganz ohne Versionsangabe. Beispiel:

  • libfoo.so -> libfoo.so.1
  • libfoo.so.1 -> libfoo.so.1.2.3
  • libfoo.so.1.2.3

Der so-Name ist in dem Fall ?libfoo.so.1“. Die Zahl nach ?.so.“ ?ndert sich nur dann, wenn sich in einer neuen Version die Schnittstelle der Bibliothek ?ndert.

Der Laufzeit-Linker w?hlt anhand von Versions-Informationen im auszuführenden Programm bzw. in der zu ladenden Bibliothek eine Version mit einer kompatiblen Schnittstelle aus. Da sowohl Programme von Bibliotheken abh?ngen k?nnen, als auch Bibliotheken von weiteren Bibliotheken, kann eine Software indirekt von vielen Bibliotheken abh?ngen. Da viele Unixoide Systeme die Bibliotheken zentral für Betriebssystem und Applikation zusammen verwalten, existieren Paketverwaltungen, die Abh?ngigkeiten berechnen und ben?tigte Bibliotheken automatisch installieren k?nnen. Beispiele für derartige Paketverwaltungs-Systeme sind APT und YUM.

Von welchen Bibliotheken ein Programm direkt abh?ngt, l?sst sich auf einigen Systemen mit Hilfe des UNIX-Programms ldd herausfinden.

Bei Software, die in der Bin?rversion vertrieben werden soll, beispielsweise kommerzielle Closed-Source-Software oder portable/distributionunabh?ngige Software, muss gew?hrleistet werden, dass alle ben?tigten Bibliotheken vorliegen. Das Anwendersystem, auf dem diese Software verwendet werden soll, muss dann als kompatible Bin?rplattform agieren k?nnen. Dies kann folgenderma?en geschehen:

  • Angabe einer oder mehrerer kompatibler Betriebssystem-Distributionen, zum Beispiel: ?Lauff?hig unter Debian 5.0 (Lenny)“.
  • Verwendung eines distributionsspezifischen Paketes, so dass ben?tigte Bibliotheken vom Paketmanager nachgeladen werden. Nachteil ist der enorme Aufwand der Bereitstellung eines Paketes für die vielen existierenden Distributionen.[3][4]
  • Mitliefern aller dynamischen Bibliotheken. Diese werden, zusammen mit dem Programm, Dokumentation usw. in ein separates Verzeichnis kopiert, um nicht mit Versionen, die von der Paketverwaltung systemweit installiert wurden, zu kollidieren. Anschlie?endes Anpassen des Bibliothekensuchpfads für das Programm mit LD_LIBRARY_PATH über ein Skript oder h?ndisch.[5]
  • Verzicht auf dynamische Bibliotheken und Statisches Linken, was aber technisch schwierig ist[6][7] oder durch Lizenzkonflikte verhindert werden kann. Au?erdem verliert man damit Distribution-basierenden Updatesupport.[8]
  • über private Bibliotheken[1] die über einen relativen Bibliothekspfad eingebunden werden. Hierzu muss die Applikation mit der Linker-Option $ORIGIN erzeugt werden.[5]

Objekt- und komponentenorientierte Ans?tze k?nnen hier realisiert werden, indem in einer Funktion das entsprechende Objekt oder die Komponente instantiiert und zurückgegeben werden.

Vorteile

  • Gemeinsame Nutzung von Ressourcen
  • Vermeidung von redundanten privaten Libraries
  • Eine enorme Anzahl von freien und mitgelieferten Bibliotheken stehen zur Verfügung
  • Bibliotheken k?nnen unabh?ngig vom Hauptprogramm ausgebessert werden[8] und Programmupdates werden kleiner
  • Optimierungen an einer Stelle k?nnen das ganze System beschleunigen
  • K?nnen schnell ver?nderliche Systemaufrufe verbergen
  • Abstrahieren von low-level Problemen

Nachteile

  • Probleme in essentiellen Bibliotheken machen Systeme unbenutzbar. Durch entsprechende Skripte der Paketverwaltung ist bei modernen Distributionen jedoch meist sichergestellt, dass dies nicht passieren kann.
  • Bei inkompatiblen Ver?nderungen der Bin?rschnittstelle müssen alle abh?ngigen Programme neu kompiliert werden. Durch Versionsnummern und parallele Verwendung von Paketen reduziert sich das Problem der Bin?rkompatibilit?t, wird jedoch nicht gel?st.[9]
  • Bei inkompatiblen Ver?nderungen der Programmierschnittstelle müssen alle abh?ngigen Programme entsprechend angepasst werden.
  • Die Erstellung portabler oder distributionsübergreifender Programme wird schwieriger.[10][11]

Bibliotheken unter z/OS

[Bearbeiten | Quelltext bearbeiten]

Bei z/OS wie auch in den Vorg?ngersystemen System/360 und System/390 werden/wurden Programmbibliotheken (wie alle Arten von Bibliotheken) in der Form von Partitioned Data Sets (PDS) geführt. Je Programmcode-Typ (siehe unten) werden i. d. R. eigene Bibliotheken benutzt und deren Elemente typneutral als Member bezeichnet. Die Members werden von verschiedenen Systemprogrammen der Entwicklungsumgebung dort eingestellt und von dort verwendet.

Je Programmcode-Typ wird – je nach Bedarf – eine (1) Bibliothek für ein ganzes Unternehmen, je Unternehmensbereich oder für bestimmte Anwendungsgebiete verwendet. Die Unterscheidung der Eintr?ge erfolgt über den Membernamen. Es werden zum Beispiel folgende Arten von Programmbibliotheken benutzt:

Code-/Bibliothekstypen z. B. bei z/OS (mit 3GL-Sprache)
  • Quelltextbibliotheken: Diese enthalten den Quellcode von Programmen oder Unterprogrammen, d. h. Deklarationen, Funktionen und je nach Programmiersprache andere Codeteile. Besondere Auspr?gungen von Quelltexten werden oft in getrennten Bibliotheken verwaltet; Beispiele sind:
    • Copybook-Bibliotheken; sie enthalten Fragmente von Quellcode, zum Beispiel Datendeklarationen für bestimmte Datensatz-Arten oder funktionale Codeteile zur Verwendung in vielen Programmen.
    • Makrobibliotheken enthalten zum Beispiel für die Assemblersprache die Anweisungen, durch die beim Assemblieren der Makroaufruf in ASSemblercode umgewandelt und im Quellcode eingefügt wird.
Die Eintr?ge in Quelltextbibliotheken werden üblicherweise mithilfe von Texteditoren erzeugt und ge?ndert sowie von Compilern/Assemblern als Input benutzt, um kompilierten Programmcode zu erzeugen.
  • In Objektcode-Bibliotheken werden von den übersetzern Objektmodule eingestellt, je Kompilierung in der Regel ein Modul. Diese Module sind der Input für das anschlie?end erforderliche Linken oder Binden; dem auch Linkage Editor genannten Systemprogramm wird diese Bibliothek als SYSLIB bekanntgegeben.
  • Beim Binden entstehen sogenannte Lademodule, die in einer Ladebibliothek, u. a. auch ?Core Image Library“ genannt, eingestellt werden. Ladebibliotheken k?nnen
    • unternehmensweit in nur einer gemeinsamen Bibliothek alle Programm-Typen enthalten oder
    • wahlweise (und in der Regel) in getrennten Bibliotheken die (per JCL) aufzurufenden Hauptprogramme bzw. die per Load-Befehl individuell nachzuladenen Unterprogramme aufnehmen.
Zur Ausführung werden evtl. unterschiedliche Bibliotheken über die STEPLIB- oder die JOBLIB- oder die LINKLIST-Angabe zugeordnet und die einzelnen Module daraus vom Betriebssystem geladen.

Bibliotheken unter Amiga OS

[Bearbeiten | Quelltext bearbeiten]

Beim AmigaOS werden alle Bibliotheken als shared Library verwendet. Sie werden also zur Laufzeit vom Programm beim System angefordert, das dann die Basisadresse der Bibliothek im Speicher (bis OS3.9) oder die entsprechende Schnittstelle (ab OS4.0) zur Verfügung stellt. Das Programm verwendet dann relative Adressen, um über eine Sprungtabelle vor der Basisadresse an die eigentlichen Funktionen (hinter der Basisadresse) zu kommen. Diese Funktionen sind eintrittsinvariant (reentrant).

Selbst bei ?nderungen der Bibliothek sind die bestehenden Eintr?ge der Sprungtabellen immer gleich. Es kommen ggf. lediglich neue Eintr?ge hinzu am Ende der Tabellen. Somit ist eine Abw?rtskompatibilit?t gegeben.

Als Besonderheit kann bei AmigaOS beim ?ffnen einer Library eine Mindest-Versionsnummer angegeben und so sichergestellt werden, dass eine gewünschte Funktionalit?t auch wirklich verfügbar ist. Wird diese Version nicht vorgefunden, kann das aufrufende Programm sicher auf eine einfachere Funktionalit?t, wie sie in der ?lteren Library-Version bereitgestellt wird, zurückschalten.

Bibliotheksdateien tragen die Endung .library und befinden sich meist im Verzeichnis LIBS: der Systempartition. Das Betriebssystem überprüft bei der Suche nach einer Bibliothek auch das Programmverzeichnis des anfragenden Programms.

Wiktionary: Programmbibliothek – Bedeutungserkl?rungen, Wortherkunft, Synonyme, übersetzungen

Einzelnachweise

[Bearbeiten | Quelltext bearbeiten]
  1. a b Rick Anderson: The End of DLL Hell. microsoft.com, 11. Januar 2000, archiviert vom Original am 5. Juni 2001; abgerufen am 15. Januar 2012: ?Private DLLs are DLLs that are installed with a specific application and used only by that application.
  2. Arnaud Desitter: Using static and shared libraries across platforms; Row 9: Library Path. ArnaudRecipes, 20. Juli 2011, archiviert vom Original am 20. Juli 2011; abgerufen am 26. Januar 2012 (englisch): ?win32 runtime library path:. and then PATH
  3. Eric Brown: LSB 4.0 certifications aim to heal Linux fragmentation. linuxfordevices.com, 8. Dezember 2010, archiviert vom Original am 24. Dezember 2013; abgerufen am 16. November 2011 (englisch): ?[…] LSB helps to reduce fragmentation, it does not eliminate it. ?The issue of packaging and broader dependencies is still a big one (for me) at least,“ writes Kerner. ?The same RPM that I get for Fedora won’t work on Ubuntu, and Ubuntu DEB packages won’t work on SUSE etc etc.“[…]
  4. Eskild Hustvedt: Playing well with distros. Linux Game Publishing, 24. November 2009, archiviert vom Original am 21. September 2011; abgerufen am 15. Januar 2012 (englisch).
  5. a b Eskild Hustvedt: Our new way to meet the LGPL. 8. Februar 2009, archiviert vom Original am 13. April 2014; abgerufen am 9. M?rz 2011 (englisch): ?You can use a special keyword $ORIGIN to say ‘relative to the actual location of the executable’. Suddenly we found we could use -rpath $ORIGIN/lib and it worked. The game was loading the correct libraries, and so was stable and portable, but was also now completely in the spirit of the LGPL as well as the letter!
  6. Evan Jones: Portable Linux Binaries. 13. Februar 2008, abgerufen am 10. Januar 2012 (englisch): ?Linux is not well known for its binary portability. Libraries vary from system to system, and the kernel interfaces have a tendency to change. […] Recently, I needed to build a binary on one system, and run it on another. It only used standard C library functions, so I expected it to be easy. It was not. […]
  7. Christoph Baus: Yet another Unix nightmare: statically linking libstdc++. 31. Mai 2005, archiviert vom Original am 10. Februar 2010; abgerufen am 15. Januar 2012 (englisch).
  8. a b Ulrich Drepper: Static Linking Considered Harmful. redhat.com, archiviert vom Original am 27. Mai 2010; abgerufen am 13. Januar 2012 (englisch): ?There are still too many people out there who think (or even insist) that static linking has benefits. This has never been the case and never will be the case. […]
  9. Mike Hearn: Random Collection of Current Linux Problems Binary Portability. Autopackage.org, 2006, archiviert vom Original am 18. Mai 2009; abgerufen am 23. Januar 2012 (englisch): ?This page was prepared for the OSDL meeting in December 2005. It describes many of the problems inherent to Linux we’ve encountered whilst distributing complex software in binary form to end users. It also offers a few suggestions for improvements.
  10. Troy Hepfner: Linux Game Development Part 2 – Distributable Binaries. gamedev.net, 1. Oktober 2007, archiviert vom Original am 13. Oktober 2007; abgerufen am 19. Dezember 2011 (englisch): ?Creating an executable that works on almost all Linux distributions is a challenge. There are a number of factors that contribute to the problem […]
  11. Simon Peter: AppImageKit Documentation 1.0. (PDF; 38 kB) PortableLinuxApps.org, 2010, S. 2–3, archiviert vom Original am 29. November 2010; abgerufen am 29. Juli 2011 (englisch): ?Not easy to move an app from one machine to another
又什么又什么的花 太白金星是什么神 耳石症挂什么科 州字五行属什么 海棠是什么
银红色是什么颜色 泥石流是什么 鸡蛋白过敏指的是什么 小孩睡觉出很多汗是什么原因 胸ct和肺ct有什么区别
水床是什么 大便想拉又拉不出来是什么原因 循证是什么意思 中性粒细胞是指什么 田螺姑娘是什么意思
大姨妈不来是什么原因 狗为什么喜欢吃屎 脸上发麻是什么原因 枫叶是什么树 迪化是什么意思
女人吃什么水果最好hcv9jop7ns0r.cn 人为什么会得抑郁症helloaicloud.com 爆粗口是什么意思hcv8jop7ns1r.cn 风疹病毒igg阳性是什么意思hcv8jop9ns8r.cn 头皮毛囊炎用什么药hcv7jop6ns3r.cn
送女朋友什么礼物好hcv9jop8ns1r.cn 吃中药不可以吃什么水果hcv7jop9ns1r.cn 房间朝向什么方向最好hcv8jop0ns4r.cn 熊猫属于什么科动物hcv9jop2ns4r.cn 孕妇不吃饭对胎儿有什么影响hcv7jop6ns8r.cn
保温杯什么牌子好hcv8jop0ns0r.cn 浪琴手表属于什么档次hcv7jop5ns3r.cn 再生牙技术什么时候能实现hcv8jop6ns6r.cn 小孩睡觉说梦话是什么原因hcv8jop3ns0r.cn 吃榴莲不能吃什么1949doufunao.com
初伏吃什么hcv8jop1ns0r.cn 什么原因造成低血糖hcv9jop0ns6r.cn 去医院看心理挂什么科hcv9jop6ns9r.cn 18k金和24k金有什么区别hcv8jop1ns2r.cn 孕妇吃什么水果好对胎儿好hcv7jop9ns7r.cn
百度