Je suis habitué à compiler pour Linux, donc ces fichiers .lib sont un peu bizarres pour moi. Avec mon programme sous Visual Studio, je continue à avoir des symboles externes aléatoires non résolus pour d'autres bibliothèques 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 n'inclus que ces bibliothèques et je peux confirmer qu'elles ont été trouvées:
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 de réinstaller Windows 7 SDK et Visual Studio. Je suis également sous Windows 7.
Toute aide concernant ce problème serait appréciée et je me ferai un plaisir de donner plus d’informations au besoin.
Merci, Boncey
Le problème est que vos bibliothèques statiques glfw ont été créées avec une version de Visual Studio différente de celle que vous utilisez. À compter du printemps 2015, les versions prédéfinies de glfw.org ne sont plus compatibles avec Visual Studio 2015 RC (que vous semblez utiliser).
Heureusement, GLFW est une petite base de code publiée sous licence permissive. La solution la plus simple consiste donc simplement à créer un nouveau projet dans votre solution. Les étapes vont quelque chose comme ça:
include
, deps/GL
et créez un dossier src
.src
pour les plates-formes que vous souhaitez prendre en charge. Pour Windows, c'est tout avec un préfixe win
ou wgl
ou aucun préfixe. Vous pouvez ignorer tous les trucs de cmake.src
appelé glfw_config.h
contenant #defines
de _GLFW_WIN32
, _GLFW_WGL
et _GLFW_USE_OPENGL
. Si vous souhaitez prendre en charge plus que Windows, vous devez définir de manière conditionnelle les options souhaitées dans ce fichier. Toutes les options sont décrites dans src/glfw_config.h.in
._GLFW_USE_CONFIG_H
aux définitions.$(SolutionDir)GLFW\$(Platform)\$(Configuration)\glfw.lib
.)Vous pouvez également ajouter une bibliothèque supplémentaire à votre entrée de l'éditeur de liens i.e, legacy_stdio_definitions.lib
Allez dans Propriétés> Éditeur de liens> Entrée.
Et dans Additional Dependencies, ajoutez la bibliothèque mentionnée ci-dessus.
Il semble y avoir une erreur de connexion entre les liens de bibliothèque d'exécution dynamiques et statiques. Le préfixe "__imp" sur les symboles signifie que votre code recherche quelque chose dans une DLL, mais que les bibliothèques avec lesquelles vous êtes en liaison attendent probablement des bibliothèques d'exécution statiques.
Affichez les pages de propriétés du projet (sous Build-> Properties), puis recherchez la catégorie C++ à gauche. Sous "Génération de code", il devrait y avoir une entrée appelée "Bibliothèque d'exécution". Ceci est probablement actuellement défini sur Debug multi-thread DLL (/ MDd), car il semble que vous compiliez en mode débogage. Changez-le en débogage multithread (/ MTd) et recompilez tout. Voyez si cela fonctionne maintenant.