2016-06-30 23 views
1

Ich versuche, mein Projekt gegen die libpng Version 1.6.23 DLL-Bibliothek verknüpfen, aber mein Linker sieht nur alle Funktionsaufrufe, die ich es als nicht aufgelöste externe Symbole machen. Ich verwende Visual Studio Express 2013. Hier ist ein Ausschnitt der Linker-Ausgabe.libpng Funktionsaufrufe sind alle ungelösten externen Symbole

1>PNGUtils.obj : error LNK2019: unresolved external symbol png_set_sig_bytes referenced in function "public: static void * __cdecl PNGUtils::Read(char const *,unsigned int &,unsigned int &,int &)" ([email protected]@@[email protected]) 
1>PNGUtils.obj : error LNK2019: unresolved external symbol png_sig_cmp referenced in function "private: static bool __cdecl PNGUtils::Validate(struct _iobuf *)" ([email protected]@@[email protected]@@Z) 
1>PNGUtils.obj : error LNK2019: unresolved external symbol png_create_read_struct referenced in function "public: static void * __cdecl PNGUtils::Read(char const *,unsigned int &,unsigned int &,int &)" ([email protected]@@[email protected]) 
1>PNGUtils.obj : error LNK2019: unresolved external symbol png_set_longjmp_fn referenced in function "public: static void * __cdecl PNGUtils::Read(char const *,unsigned int &,unsigned int &,int &)" ([email protected]@@[email protected]) 
1>PNGUtils.obj : error LNK2019: unresolved external symbol png_create_info_struct referenced in function "public: static void * __cdecl PNGUtils::Read(char const *,unsigned int &,unsigned int &,int &)" ([email protected]@@[email protected]) 
1>PNGUtils.obj : error LNK2019: unresolved external symbol png_read_info referenced in function "public: static void * __cdecl PNGUtils::Read(char const *,unsigned int &,unsigned int &,int &)" ([email protected]@@[email protected]) 
1>PNGUtils.obj : error LNK2019: unresolved external symbol png_set_expand_gray_1_2_4_to_8 referenced in function "public: static void * __cdecl PNGUtils::Read(char const *,unsigned int &,unsigned int &,int &)" ([email protected]@@[email protected]) 

Ich Verknüpfung erfolgreich mit anderen Bibliotheken wie lua und glew, und ich bin meines Wissens tun nichts anderes, wenn sie versuchen zu libpng zu verknüpfen.

Seltsamerweise, wenn ich den Linker in den ausführlichen Modus versetzt. Darin heißt es ...

1> Finished searching libraries 
1> 
1> Unused libraries: 
1> libs\png\libpng16.lib 

Die Linker zu Anspruch scheint, dass ich nicht die Bibliothek libpng bin mit, obwohl ich deutlich seine Funktionen wie in meinem Code-Segment hier in PNGUtils.cpp Read-Methode nenne.

Ich fühle mich verloren auf, warum der Linker die Funktionsaufrufe zu libpng zu ignorieren scheint. Ich würde mich freuen, irgendwelche Gedanken oder Antworten zu hören und bin natürlich mehr als bereit, weitere Informationen auf Anfrage zur Verfügung zu stellen.

+0

Ich denke, der 'Unbenutzte Bibliotheken' Teil bedeutet, dass der Linker diese Bibliothek beim Erstellen der Objektdateien/ausführbare Datei ignoriert. Sie müssen herausfinden warum. –

Antwort

1

Seien Sie sicher, dass Ihr Projekt und Ihre libpng.dll mit die gleichen Einstellungen gebaut wurden, wie in den Projekten erklärt/VStudio/README.txt, die mit libpng kommt:

WARNUNG ==== === Libpng 1.6.x verwendet nicht die Standard-Laufzeitbibliothek, wenn statische Bibliotheken erstellt von libpng; anstelle der freigegebenen DLL Laufzeit verwendet es eine statische Laufzeit. Wenn Sie dies ändern müssen machen Sie die Einstellung auf allen relevanten Projekten ändern:

libpng 
zlib 
all the test programs 

Die Laufzeitbibliothek Einstellungen für jeden Build sind wie folgt:

  Release  Debug 
DLL   /MD   /MDd 
Library  /MT   /MTd 

Beachten Sie, dass libpng 1.5.x fälschlicherweise verwendet/MD für Debug-DLL-Builds; Wenn Sie die Debug-Builds in Ihrer App verwendet haben und Sie Ihre App so geändert haben, dass sie /MD verwendet, müssen Sie sie später wieder in/MDd für libpng 1.6.0 und ändern.

das Visual Studio 2010 Standardeinstellungen für eine Win32-DLL oder statische Bibliothek Projekt sind wie folgt:

    Release  Debug 
DLL    /MD   /MDd 
Static Library /MD   /MDd 

auch sicher, dass libpng zu bauen, zlib, und Ihr Projekt alle für die gleiche Plattform (zB , 32-Bit oder 64-Bit).

+0

Ich bin mir sicher, dass dies ein Schritt in die richtige Richtung war, danke, dass Sie darauf hingewiesen haben. Ich habe es schließlich behoben, indem ich den libpng Quellcode zu 64bit kompiliert habe, da mein Projekt 64bit ist. Die Fehler sind jetzt weg. – ZFect

+0

Ich werde das hinzufügen (etwa 32bit vs 64bit) zum libpng doc. –