Visual Studio 2012 - zlib
-
Hallo,
Ich hoffe der Beitrag ist im richtigen Forum.Ich habe ein Problem mit der zlib 1.2.8. Habe die .dll, bzw .lib selbst nach diese Anleitung (http://www.tannerhelland.com/5076/compile-zlib-winapi-wapi-stdcall) erzeugt. Danach ein kleines Testprojekt erstellt. Bei den VC++-Verzeichnisse stehen die Include/Bibliothekverzeichnisse, und beim Linker->Eingabe->zusätzliche Abhängigkeiten die zlibwapi.lib.
Wen ich nun eine Funktion aus dieser Bibliothek benutzen möchte dann..1>main.obj : error LNK2019: Verweis auf nicht aufgelöstes externes Symbol "_gzopen" in Funktion "_main". 1>..\Debug\Test Projekt.exe : fatal error LNK1120: 1 nicht aufgelöste Externe
Habe ich da irgendwas vergessen? Habe zu diesem Thema auch nichts im Internet gefunden. Also Visual Studio und zlib.
Hoffe ihr könnt mir irgendwie helfen.LG
Catalamo
-
Catalamo schrieb:
Hallo,
Ich hoffe der Beitrag ist im richtigen Forum.Nein, falsches Forum
-
Ich glaube die Anleitung ist falsch.
So wie ich das sehe mussZLIB_WINAPI
eben gerade definiert sein - es zu entfernen ist also genau verkehrt rum.Und auf jeden Fall muss
ZLIB_WINAPI
gleich definiert sein.
Also entweder beim Kompilieren der zlib definiert und auch beim Kompilieren der Applikation definiert, oder bei beiden nicht definiert.Ich würde vorschlagen statt einer Modifikation des Project-Files einfach
#define ZLIB_WINAPI
ganz oben inzconf.h
reinzuschreiben.
Dann ist es automatisch bei beiden Projekten definiert.Und natürlich solltest du den DLL Namen ändern - von ZLIB1.DLL wird erwartet mit
__cdecl
compiliert zu sein, d.h. wenn deine__stdcall
Variante auch so heisst könnte es Probleme geben.Ansonsten: wenn du unresolved symbols bei DLLs bekommst kannst du einfach mit Dependency Walker nachgucken wie die exportierten Funktionen wirklich heissen. Wenns LIBs sind dann kannst du
dumpbin.exe
verwenden - ist aber leider nicht so klickibunti angenehm zu verwenden wie Dependency Walker.ps: Und ja, falsches Forum!
-
@hustbaer
Danke für die schnelle Antwort. Ich habe in die zconf.h ganz am Anfang das #define ZLIB_WINAPI hinzugefügt und die zlibwapi.dll neu erstellt.
Nun habe ich leider nicht ganz verstanden warum ich den Namen der DLL ändern soll und was das mit __cdecl zu tun hat.LG
CatalamoPS: Ich habe mir mit Dependency Walker die Funktionen der DLL angeschaut, und diese Funktion gibt es auch in der DLL.
-
-
geht es jetzt oder geht es immer noch nicht?
-
wieso folgst du einer anleitung zum bauen mit __stdcall wenn dir (anscheinend) nichtmal klar ist was calling conventions sind/sollen?
-
du sollst den namen ändern, weil das was du baust nicht kompatibel mit dem ist was man üblicherweise unter dem namen zlib1.dll bekommt.
-