6
votes

GCC, liaison des bibliothèques, non trouvée?

  • OS: Windows 7 Pro X64
  • IDE: Eclipse IDE pour les développeurs C / C ++
  • Compilateur: MINGW (le dernier, 4.5.2)

    Compilation de Helloworld.c fonctionne; Mais quand j'essaie d'ajouter des bibliothèques externes, elle étouffe.

    J'ai ajouté les fichiers .a et .dll à mes "bibliothèques"; Ajoutez le chemin du chemin du chemin et de la bibliothèque. J'ai également placé les fichiers inclus et configuré l'inclusion. Les bibliothèques que j'ai dit être compatibles avec Win / Mingw. Ils ont également un téléchargement différent pour MSVC qui fonctionne.

    frustrant. Le LD.exe donne le chemin complet et évidemment là-bas et j'ai des autorisations pour les lire / écrire. Je les ai également inclus sans chemin (ils sont dans le chemin de la bibliothèque et le chemin).

    Je ne comprends pas pourquoi cela ne fonctionne pas.

    C: / MINGW / BIN /. ./lib/gcc/mingw32/4.5.2/../../../../merw32/bin/ld.exe: Impossible de trouver -lc: \ rhino \ data \ lib \ glfw.dll C: / MINGW / BIN /../ lib / gcc / mingw32 / 4.5.2 /../../../../ MINGW32 / BIN / LD.EXE: Impossible de trouver -LC: \ Rhino \ Data \ lib \ libglfwdll.a C: / MINGW / BIN /../ lib / gcc / mingw32 / 4.5.2 /../../../../ MINGW32 / BIN / LD.EXE: Impossible de trouver -LC: \ Rhino \ Data \ lib \ libglfw.a xxx

    mises à jour:

    Je les ai même ajoutés à mon c: \ Mingw \ Lib chemin et ça ne peut toujours pas Trouvez-les.


5 commentaires

Assurez-vous d'avoir ajouté les bibliothèques au chemin de la bibliothèque Eclipse.


-L "C: \ Rhino \ Data \ Libs" -L "C: \ Rhino \ Data \ Lib"


Quelle est la ligne de commande ld ?


Il n'y en a pas, c'est GCC:


GCC -LC: \ Rhino \ Data \ Libs -LC: \ Rhino \ Data \ Lib -oTestC.exe testc.o -lglfw.dll -llibglgglfw.a -llibglibglfwdll.a ### Ils sont dans ce répertoire: C: \ Rhino \ Data \ Lib


4 Réponses :


0
votes

Essayez ceci:

gcc -LC:\rhino\data\libs -LC:\rhino\data\lib -oTestC.exe TestC.o -lglfw libglfw.a libglfwdll.a


3 commentaires

C: \ rhino \ eprojects \ testc \ débogage> gcc -lc: \ mingw \ lib -otestc.exe testc.o -lglfw libglfw.a libglfwdll.a gcc: libglfw.a: aucun fichier ou répertoire de ce type GCC: libglfwdll.a : Aucun fichier ou répertoire de ce type C: \ rhino \ eprojects \ testc \ débogage> gcc -lc: \ mingw \ lib -testc.exe testc.o -lglfw libglfw libglfwdll gcc: libglfw: aucun fichier ou répertoire de ce type GCC: libglfwdll: non ce fichier ou annuaire C: \ rhino \ eprojects \ testc \ débogage> gcc -lc: \ mingw \ lib -otestc.exe testc.o -lglfw -llibglfw.a libglfwdll.a gcc: libglfwdll.a: aucun fichier ou répertoire de ce type


C: \ rhino \ eprojects \ testc \ débogage> gcc -lc: \ mingw \ lib -testc.exe testc.o -lglfw -llibglgglfw.a -llibglfwdll.achanlibglfwdll.ac:/mib/bin/../lib/gcc/mingw32 /4.5.2/../../../../mingw32/bi n / ld.exe: impossible de trouver -llibglfw.ac:/mingw/bin/../lib/gcc/mingw32/4.5. 2 /../../../../../ MINGW32 / BI N / LD.EXE: impossible de trouver -LLIBGLFWDLL.A COLLECT2: LD renvoyé 1 statut de sortie


C: / MINGW / BIN /../ LIB / GCC / MINGW32 / 4.5.2 /../../../../ MINGW32 / BI N / LD.EXE: ne peut pas finc: \ rhino \ eprojects \ TESTC \ DEBUG> GCC -LC: \ MINGW \ LIB -OTESC.ELE TESTC.O -LGLFW -LLIBGLFW -LLIBGLFWDLL C: / MINGW / BIN /../ LIB / GCC / MINGW32 / 4.5.2 /../ .. /../../mingw32/bi n / ld.exe: impossible de trouver -llibGlfw c: / mingw / bin /../ lib / gcc / mingw32 / 4.5.2 /../../../ ../mingw32/bi n / ld.exe: impossible de trouver -llibglfwdll Collection2: LD renvoyé 1 sortie Statutd -llibGlfw.ac:/mingw/bin/../lib/gcc/mingw32/4.5.2/../ ../../../mingw32/bi n / ld.exe: impossible de trouver -llibglfwdll collect2: LD renvoyé 1 statut de sortie



4
votes

Mon expérience (qui n'inclut pas comment cela pourrait être configuré dans Eclipse) est que ld (que GCC invoquera) veut les noms de libéro sans le préfixe lib liber ou le .a extension. Essayez: xxx

Je ne sais pas que le fichier GLFW.DLL doit être répertorié comme une bibliothèque; La bibliothèque d'importation pour cette DLL (je suppose que libglfwdll.lib) devrait s'occuper de la liaison à la DLL.


3 commentaires

Vous pouvez également créer un lien vers DLL dans des versions récentes de GCC. Vous devez ajouter le chemin DLL à l'option -l également.


@RUBENVB: intéressant - je ne le savais pas. Maintenant, les questions sont les suivantes: pourquoi MSVC ne vous oblige-t-il pas à le faire et ce qui a pris si longtemps?


Eh bien, vous pouvez, via LoadLibrary et Messiness associé. Quant à ce qui a pris si longtemps; Je ne sais pas exactement quand il a été mis en œuvre, mais il semble quelque part avant / autour de 2007, à travers de vieux postes de forum ...



12
votes

Michael Burr a souligné la bonne façon de référencer les bibliothèques sur la ligne de commande. Le chemin de la bibliothèque est donné avec le commutateur -L et le nom de la bibliothèque avec le commutateur -L (nom de la bibliothèque étant le nom du fichier, sans La partie lib au début et le .a suffixe à la fin).

Une dernière chose à signaler est que vous essayez de créer un lien avec la version statique (libglfw.a) et la version dynamique (GLFW.DLL) de la bibliothèque, qui sont toutes deux incluses dans le téléchargement, au même temps. Au lieu de cela, vous devez en choisir un, en fonction de vos besoins / des désirs, et de lier seulement celui-là.

La liaison contre la version statique est simple. Il suffit d'ajouter -lglfw à la ligne de commande.

Pour utiliser la bibliothèque dynamique, vous devez créer un lien avec la bibliothèque d'importation pour la DLL ( libglfwdll.a ), à l'aide du commutateur -LGLFWDLL et omettez la DLL. lui-même de la commande de liaison. Fondamentalement, la bibliothèque d'importation ne contient aucun code d'objet, mais seulement des définitions; Le code actuel est dans la DLL. La DLL sera liée de manière dynamique au moment de l'exécution. (Pour que cela fonctionne, le système doit être capable de trouver la DLL; c'est-à-dire qu'il doit figurer dans le répertoire de travail actuel, dans un répertoire figurant sur le chemin du chemin ou son répertoire doit être ajouté à une variable d'environnement spécial utilisée. Pour cette chose; mais pour que cela soit important, vous devez d'abord réussir à construire l'exécutable.)


0 commentaires

0
votes

Bien que cela soit assez ancien, je suis tombé sur cette question d'un problème récent et la solution est très différente de ce qui précède, alors partageez-la.

Dans mon cas, en raison de l'ordre de coquillage $ ( echo $ chemin code>), gcc code> utilisait ld code> à partir de l'installation anaconda, et ce ld code> n'a pas pu trouver une bibliothèque particulière. P>

Changement de la commande de chemin de chemin résolu: P>

export PATH=/usr/bin:$PATH


0 commentaires