Symboles externes aléatoires non résolus qui ne devraient pas être présents
J'ai l'habitude de compiler pour Linux donc ce .lib stuff est un peu bizarre pour moi. Avec mon programme sous Visual Studio, je reçois aléatoire symbole externe non résolu pour les autres libs et même Microsoft Runtimes.
1>glfw3.lib(init.c.obj) : error LNK2019: unresolved external symbol __imp__vsnprintf referenced in function __glfwInputError
1>MSVCRTD.lib(vsnprintf.obj) : error LNK2001: unresolved external symbol __imp__vsnprintf
1>glfw3.lib(context.c.obj) : error LNK2019: unresolved external symbol __imp__sscanf referenced in function _parseVersionString
1>MSVCRTD.lib(vsnprintf.obj) : error LNK2001: unresolved external symbol __imp___vsnprintf
1>C:\Program Files (x86)\Microsoft Visual Studio 14.0\VC\lib\OLDNAMES.lib : warning LNK4272: library machine type 'UNKNOWN' conflicts with target machine type 'X86'
Je suis seule, y compris ces bibliothèques, et je peux confirmer qu'ils sont en train d'être trouvé:
x86/glew32s.lib
x86/glfw3.lib
x86/glfw3dll.lib
opengl32.lib
Avec leurs valeurs héritées:
kernel32.lib
user32.lib
gdi32.lib
winspool.lib
comdlg32.lib
Je peux confirmer que c'est l'ordre exact. J'ai essayé d'installer et ré-installation de Windows 7 SDK et Visual Studio, je suis aussi sur Windows 7.
Toute aide concernant cette question serait appréciée et je suis heureuse de vous donner plus d'information si nécessaire.
Merci, Boncey
source d'informationauteur Boncey
Vous devez vous connecter pour publier un commentaire.
Le problème, c'est que votre glfw bibliothèques statiques ont été construits avec une autre version de Visual Studio que celui que vous êtes en utilisant. Dès le printemps 2015, les prêts à l'emploi sur glfw.org ne sont pas compatibles avec Visual Studio 2015 RC (qui vous semblent utiliser).
Heureusement, GLFW est une petite base de code publié sous une licence permissive, de sorte que la solution la plus simple est tout simplement de créer un nouveau projet dans votre solution. Les étapes va aller quelque chose comme ceci:
include
deps/GL
et de créer unsrc
dossier.src
dossier pour les plates-formes que vous l'intention de les soutenir. Pour windows, c'est tout unwin
ouwgl
préfixe, ou pas de préfixe. Vous pouvez ignorer toutes les cmake choses.src
appeléglfw_config.h
contenant#defines
de_GLFW_WIN32
_GLFW_WGL
et_GLFW_USE_OPENGL
. Si vous voulez soutenir plus que windows, vous aurez à conditionnellement définir les options que vous voulez dans ce fichier. Toutes les options sont décrites danssrc/glfw_config.h.in
._GLFW_USE_CONFIG_H
pour les définitions.$(SolutionDir)GLFW\$(Platform)\$(Configuration)\glfw.lib
.)Vous pouvez également ajouter une bibliothèque supplémentaire pour votre linker entrée je.e,
legacy_stdio_definitions.lib
Allez à Propriétés > Linker > Input.
Et autres Dépendances ajouter le mentionnés ci-dessus de la bibliothèque.
Il semble qu'il y ait un misconnect entre dynamique et statique de la bibliothèque d'exécution de la liaison. "__Imp" préfixe sur les symboles signifie que votre code est à la recherche de quelque chose à partir d'une DLL, mais les bibliothèques que vous êtes liaison sont probablement attendre statiques des bibliothèques d'exécution.
Afficher les pages de propriétés du projet (en vertu de Build->Propriétés), et pour le C++ catégorie sur la gauche. En vertu de la "Génération de Code" il devrait y avoir une entrée appelée "Bibliothèque d'Exécution". C'est probablement actuellement à multithread DLL de Débogage (/MDd), car on dirait que vous êtes la compilation en mode debug. Le changement de ce Multi-threaded Debug (/MTd), et tout recompiler. Voir si cela fonctionne maintenant.