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 muss ZLIB_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 in zconf.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
    Catalamo

    PS: Ich habe mir mit Dependency Walker die Funktionen der DLL angeschaut, und diese Funktion gibt es auch in der DLL.



    1. geht es jetzt oder geht es immer noch nicht?

    2. wieso folgst du einer anleitung zum bauen mit __stdcall wenn dir (anscheinend) nichtmal klar ist was calling conventions sind/sollen?

    3. du sollst den namen ändern, weil das was du baust nicht kompatibel mit dem ist was man üblicherweise unter dem namen zlib1.dll bekommt.


Log in to reply