GCC, associant les bibliothèques, pas trouvé?
- Système d'exploitation: Windows 7 Pro X64
- IDE: Eclipse IDE pour Développeurs C/C++
- Compilateur MinGW (dernière, 4.5.2)
Compilation HelloWorld.c fonctionne, mais quand j'essaie d'ajouter un peu de bibliothèques externes qu'elle s'étouffe.
J'ai ajouté de l' .un et .les fichiers dll de mon "Bibliothèques"; ajouter le chemin d'accès à la fois le CHEMIN et le Chemin de la Bibliothèque. J'ai aussi mis les fichiers à inclure et configuré le Comprennent. Les bibliothèques que j'ai dit pour être compatible avec win/mingw. Ils ont aussi un autre téléchargement pour MSVC qui fonctionne.
Frustrant. L'ld.exe donne le chemin d'accès complet et évidemment, et j'ai les autorisations pour lire/écrire. J'ai aussi inclus sans chemin (ils sont dans le chemin de la bibliothèque et le chemin d'accès).
Je ne comprends pas pourquoi cela ne fonctionne pas.
c:/mingw/bin/../lib/gcc/mingw32/4.5.2/../../../../mingw32/bin/ld.exe: ne peut trouver -lC:\rhino\data\lib\glfw.dll
c:/mingw/bin/../lib/gcc/mingw32/4.5.2/../../../../mingw32/bin/ld.exe: ne peut trouver -lC:\rhino\data\lib\libglfwdll.un
c:/mingw/bin/../lib/gcc/mingw32/4.5.2/../../../../mingw32/bin/ld.exe: ne peut trouver -lC:\rhino\data\lib\libglfw.un
C:\Users\rhino>dir C:\rhino\data\lib\libglfw.a
04/15/2011 05:24 PM 70,384 libglfw.a
Mise à jour:
J'ai même ajouté à mon C:\MinGW\lib le chemin et il ne peut toujours pas trouver.
-L"C:\rhino\data\libs" -L"C:\rhino\data\lib"
Quelle est la
ld
ligne de commande?Il n'y a aucun, c'est gcc:
gcc-LC:\rhino\data\libs-LC:\rhino\data\lib -oTestC.exe TestC.o -lglfw.dll -llibglfw.a-llibglfwdll.un ### Ils sont dans ce répertoire: C:\rhino\data\lib
OriginalL'auteur user697111 | 2011-04-15
Vous devez vous connecter pour publier un commentaire.
Michael Burr a souligné la bonne façon de référencement des bibliothèques sur la ligne de commande. Le chemin d'accès à la bibliothèque est donné avec le
-L
commutateur, et le nom de la bibliothèque avec le-l
switch (le nom de la bibliothèque nom de fichier, sans lelib
partie au début, et le.a
suffixe à la fin).Plus qu'une chose à remarquer, c'est que vous êtes en essayant de lier à la fois à la statique (libglfw.a) et la dynamique (glfw.dll version de la bibliothèque, qui sont tous deux inclus dans le téléchargement, dans le même temps. Au lieu de cela, vous devez en choisir un, en fonction de vos besoins/les désirs, et le seul lien que l'on.
De se lier à la version statique est simple. Juste ajouter
-lglfw
à la ligne de commande.L'utilisation de la dynamique de la bibliothèque, vous devez le lier avec la bibliothèque d'importation de la dll (
libglfwdll.a
), en utilisant la-lglfwdll
interrupteur, et omettre la dll elle-même à partir de la commande de liaison. Fondamentalement, la bibliothèque d'importation ne contiennent pas de code objet, mais seulement des définitions; le code de la dll. La dll sera liée dynamiquement au moment de l'exécution. (Pour que cela fonctionne, le système doit être en mesure de trouver la dll; c'est à dire qu'il doit être dans le répertoire de travail actuel, dans un répertoire qui est dans le chemin d'accès, ou de son répertoire doit être ajouté à une variable d'environnement spécial utilisé pour cette chose; mais pour que cela devienne important, vous devez d'abord réussir dans la construction de l'exécutable.)OriginalL'auteur eriktous
Mon expérience (qui ne comprend pas comment cela peut être configuré dans Eclipse), c'est que
ld
(gcc invoquera) veut la lib noms sans l'lib
préfixe ou le.a
extension. Essayez:Je ne suis pas sûr que le
glfw.dll
fichier doit être répertorié comme une bibliothèque, la bibliothèque d'importation pour que DLL (je suppose que c'est la libglfwdll.lib) devrait prendre soin de la liaison à la DLL.-L
option.intéressant - je ne le savais pas. Maintenant, les questions sont: pourquoi ne pas MSVC de l'éditeur de liens vous permettent de le faire, et ce qui a pris si longtemps?
eh bien, vous pouvez, par le biais de
LoadLibrary
et associés de la médiocrité. Quant à ce qui a pris si longtemps; je ne sais pas exactement quand il a été mis en œuvre, mais il semble que quelque part avant/autour de 2007 en regardant à travers les vieux messages du forum...OriginalL'auteur Michael Burr
Essayez ceci:
C:\rhino\EProjects\TestC\Debug>gcc-LC:\MinGW\lib -oTestC.exe TestC.o -lglfw -llibglfw.a-llibglfwdll.un c:/mingw/bin/../lib/gcc/mingw32/4.5.2/../../../../mingw32/bin/ld.exe: ne peut trouver -llibglfw.un c:/mingw/bin/../lib/gcc/mingw32/4.5.2/../../../../mingw32/bin/ld.exe: ne peut trouver -llibglfwdll.un collect2: ld a retourné 1 code de sortie
c:/mingw/bin/../lib/gcc/mingw32/4.5.2/../../../../mingw32/bin/ld.exe: ne peut pas finC:\rhino\EProjects\TestC\Debug>gcc-LC:\MinGW\lib -oTestC.exe TestC.o -lglfw -llibglfw -llibglfwdll c:/mingw/bin/../lib/gcc/mingw32/4.5.2/../../../../mingw32/bin/ld.exe: ne peut trouver -llibglfw c:/mingw/bin/../lib/gcc/mingw32/4.5.2/../../../../mingw32/bin/ld.exe: ne peut trouver -llibglfwdll collect2: ld a retourné 1 sortie statusd -llibglfw.un c:/mingw/bin/../lib/gcc/mingw32/4.5.2/../../../../mingw32/bin/ld.exe: ne peut trouver -llibglfwdll collect2: ld a retourné 1 code de sortie
OriginalL'auteur TonyK