Register for your free account! | Forgot your password?

Go Back   elitepvpers > Coders Den > General Coding
You last visited: Today at 21:58

  • Please register to post and access all features, it's quick, easy and FREE!

Advertisement



Frage zu Bibliotheken

Discussion on Frage zu Bibliotheken within the General Coding forum part of the Coders Den category.

Reply
 
Old   #1
 
elite*gold: 0
Join Date: Jul 2009
Posts: 103
Received Thanks: 87
Frage zu Bibliotheken

So ich hätte da eine kleine (vielleicht auch dumme) Frage.

Wenn ich bei einem Projekt (sagen wie mal was mit Sockets)
eine statische Bibliothek(ws2_32.lib) lade warum muss ich dann noch die Headerdatei winsock einbinden ich meine theoretisch sind doch alle funktionen schon in der statischen Bibliothek deffiniert ?!
Ich freue mich auf Antworten
cooler7878 is offline  
Old 07/25/2011, 02:04   #2
 
link's Avatar
 
elite*gold: 1
Join Date: Jul 2005
Posts: 553
Received Thanks: 454
Es handelt sich dabei um zwei verschiedene Ebenen:
Compiler -> Linker

Der Compiler hat nichts mit libs zu tun und weiß daher nicht, was z.B. send oder recv ist, wenn es vorher nicht z.B. in einer Headerdatei deklariert wurde.
Dazu kommen halt noch Konstanten und Makros, die auch in Headerdateien gepackt werden.
Außerdem würde ein Funktionsname in einer lib-Datei nur ein Label sein und der Compiler wüsste dann nicht, welche Parameter die Funktion erwartet.
Erst der Linker erkennt die Referenz zu send und fügt den Code aus der lib und für den Aufruf die entsprechende Adresse ein (bzw. erstellt einen Import Table-Eintrag und verweist darauf)

Edit:
Kann auch sein, dass ich mich **** irre, bin ja müde und so *hust*
Also lieber noch auf die nächste Antwort warten :P
link is offline  
Thanks
1 User
Old 07/25/2011, 12:56   #3


 
MrSm!th's Avatar
 
elite*gold: 7110
Join Date: Jun 2009
Posts: 28,902
Received Thanks: 25,407
Außerdem musst du auch bedenken, dass Funktionen nur da bekannt sind und sein sollen, wo sie deklariert sind.
Das machst du durch Header.

Du kannst es gleichsetzen mit Header Dateien und Code Dateien.

Wenn du eine .cpp Datei mit ein paar Funktionsdefinitionen hast, kannst du die noch lange nicht in anderen Dateien nutzen.
Du musst sie erst in einem Header deklarieren und den in die anderen Dateien einbinden.

So ist es auch mit den Libraries. Es ginge zwar theoretisch, dass du alleine mit der .lib die Funktionen einbinden kannst (@link: afaik werden Parameter usw. auch in der Library notiert), aber das widerspräche ja auch dem Prinzip der Datenkapselung (ok Daten- passt jetzt hier schlecht, da es nicht um Daten geht, aber es ist im Grunde dasselbe)! Es soll nicht alles überall bekannt sein, sondern nur dort, wo du es (in diesem Fall mit einem Header) bekannt machst.
Außerdem, auch wenn die nötigen Informationen theoretisch in der Library enthalten sind, ist der Compiler etwas anderes als der Linker, wie link schon sagte. Zur Compile-Zeit weiß der Compiler noch nix von den Informationen; da müsstest du schon Compiler und Linker verbinden, damit das geht (so ist es doch glaube ich auch in .NET, da sind ja auch Dlls gleichzeitig Header und Library).

Du kannst ja auch nicht send und recv in anderen .cpp Dateien nutzen, in denen du winsock.h nicht einbindest ;O
MrSm!th is offline  
Thanks
1 User
Old 07/25/2011, 13:33   #4
 
elite*gold: 0
Join Date: Jul 2009
Posts: 103
Received Thanks: 87
Ich danke euch
cooler7878 is offline  
Old 07/25/2011, 15:02   #5
 
link's Avatar
 
elite*gold: 1
Join Date: Jul 2005
Posts: 553
Received Thanks: 454
Quote:
Wenn du eine .cpp Datei mit ein paar Funktionsdefinitionen hast, kannst du die noch lange nicht in anderen Dateien nutzen.
Das ist halt das gleiche Prinzip:
Jede .cpp-Datei wird zu einer .obj-Datei kompiliert und eine .lib-Datei ist nichts anderes als eine Zusammenfassung mehrerer .obj-Dateien.
Die eine .cpp-Datei benötigt Funktionsdeklarationen der anderen, da sie praktisch nichts miteinander zu tun haben und erst der Linker wieder mit den Referenzen untereinander arbeitet.

Quote:
@link: afaik werden Parameter usw. auch in der Library notiert
Das Name Mangling gibt z.B. an, wie viele Parameter erwartet werden und welche Calling Convention benutzt wird.
Das dient aber soweit ich weiß nur dazu, die Funktionen auseinander zu halten wegen Namespaces und Überladungen (kann mich auch irren, wüsste aber gerade nicht, was der Linker sonst z.B. mit der Calling Convention anfangen sollte)
link is offline  
Old 07/25/2011, 16:22   #6


 
MrSm!th's Avatar
 
elite*gold: 7110
Join Date: Jun 2009
Posts: 28,902
Received Thanks: 25,407
Jo, C++ Funktionen werden mit Parametern etc. notiert, damit für Überladungen die richtige gewählt werden kann.
MrSm!th is offline  
Reply




All times are GMT +1. The time now is 21:58.


Powered by vBulletin®
Copyright ©2000 - 2025, Jelsoft Enterprises Ltd.
SEO by vBSEO ©2011, Crawlability, Inc.
This site is protected by reCAPTCHA and the Google Privacy Policy and Terms of Service apply.

Support | Contact Us | FAQ | Advertising | Privacy Policy | Terms of Service | Abuse
Copyright ©2025 elitepvpers All Rights Reserved.