2011-01-13 15 views
2

Ich habe ein Problem mit statisch DLL-Dateien in Projekt verknüpfen. Ich verwende Builder C++ 6.Statisch einschließlich DLL-Dateien

I've unchecked: 
Project \ Options \ Packages -> Build with runtime packages 
Project \ Options \ Linker -> Use dynamic RTL 
Project \ Options \ CodeGuard -> CodeGuard Validation 

I've also added dll files using Project Manager: 
myProject \ Add -> myFile.dll 

Natürlich habe ich das Projekt nach allen Änderungen wieder aufzubauen und es fragt immer noch für einige DLL-Dateien zur Laufzeit. Was habe ich weggelassen?

+0

DLL steht für * Dynamic-Link * Library. – Philipp

Antwort

2

Wenn Sie statisch mit einer DLL verknüpfen, was wirklich passiert, ist, dass der Compiler erkennt, welche DLL-Funktionen Ihr Code aufruft und richtet Stubzeiger ein, die der Linker dann in die IMPORTS-Tabelle Ihrer Anwendung einfügt. Zur Laufzeit, wenn Ihre Anwendung ausgeführt wird, wird der OS Loader zuerst die IMPORTS-Tabelle (unter anderem) patchen, indem er die referenzierten DLLs in den Speicher lädt und dann die Funktionszeiger nach Bedarf aktualisiert. Dies geschieht, bevor der Code in der Anwendung ausgeführt wird. Wenn der Lader eine Referenz nicht auflösen kann, wird ein Fehler angezeigt und der Prozess wird abgebrochen. Die DLL selbst ist nicht in die Anwendung selbst kompiliert. Es muss als externe Datei verbleiben (damit es bei Bedarf mit mehreren Anwendungen/Prozessen geteilt werden kann) und dort installiert werden, wo das Betriebssystemladeprogramm es finden kann. So können DLLs verwendet werden. Keine Menge sich ändernder Projektoptionen wird das ändern.

Wenn Sie möchten, dass Ihr Bibliothekscode direkt in die Anwendung kompiliert wird, müssen Sie eine statische Bibliothek anstelle einer DLL erstellen.

6

Sie können nicht zu einer DLL wie folgt verknüpfen. Sie müssen zuerst eine .LIB erstellen und dann eine Verknüpfung zu dieser erstellen.

Wenn Sie die .LIB nicht erstellen können, können Sie eine .DEF verwenden. Lesen Sie this oder Google.

(btw: Builder C++ die gleichen oder ähnlich benannten Tools wie auf der MSDN hat)

0

Statt Ihre eigene DLL hinzufügen, finden Sie here wie Sie Ihre eigene statische Bibliothek erstellen, die Sie zu Ihrem Projekt hinzufügen können. Es ist nicht möglich, eine statische Bibliothek zu erstellen, wenn Sie nur die DLL haben. Sie können nur eine Import-Bibliothek aus einer DLL generieren, und dafür müssen Sie auch die DLL verteilen.

+0

Hmm .. Ich habe in meinem Beitrag geschrieben, dass ich diese Optionen deaktiviert hatte, so wie ich es verstehe, ist es in Ordnung für statische Verknüpfung. Habe ich recht? Aber ... der zweite Teil Ihrer Antwort, sagt klar, dass ich noch dll's sogar durch eine Bibliothek einschließen muss, weil ich nur dll's habe. Es ist einfacher, in einer solchen Situation dynamisch zu bleiben. – qlf00n

+0

Entschuldigung, mein Fehler. Ich habe "unchecked" überlesen. Ich werde den ersten Teil meiner Antwort löschen, da es eindeutig falsch ist. – wimh