10
votes

Libbusb référence non définie à

J'essaie de mettre en place une API libusb sur mon système d'exploitation. J'ai téléchargé Libusb API sur libusb.org. J'ai suivi la procédure d'installation standard: xxx

puis j'ai lancé Eclipse C / C ++ et copié un code du tutoriel trouvé sur Internet. Mais lorsque vous essayez de le construire, j'ai eu la sortie suivante: xxx

J'ai libusb.so in / lib et j'ai aussi USB.h in / usr / local / include et le lien pour le .so et libusb.a dans /usr/local/lib.<

Aso the #include à l'intérieur du code est correct.

Je sais que le problème est dans la liaison mais je , genre de, ne peut pas le faire fonctionner :)

J'utilise le système d'exploitation Fedora 15 et GCC 4.6.0 20110603 (Red Hat 4.6.0-10) Compilateur de version.

Alors, que pourrais-je faire pour résoudre ces références indéfinies? Merci beaucoup pour l'aide :)


1 commentaires

S'il vous plaît voir le lien suivant, cela a fonctionné pour moi Stackoverflow.com/Questtions/10059146/gcc-libm-not- Travailler


4 Réponses :


1
votes

Quelle est votre ligne de commande de liaison? Vous devez avoir -LUSB dans la commande de liaison; Juste avoir l'en-tête inclus ne fonctionnera pas.


1 commentaires

Je l'ai essayé mais je ne savais pas comment obtenir le drapeau -Lusb :) Mais Xtroce m'a dit que maintenant ça marche :) Merci d'aide :)



1
votes

Je n'utilise pas Eclipse C / C ++, mais je suis à peu près sûr que la raison est la même que je me suis confrontée il y a quelque temps lors de la mise en place d'un projet C dans NetBeans.

Il ne suffit pas d'avoir le #include dans votre code et la bibliothèque au bon endroit - vous devez également dire Eclipse où les chercher et comment les utiliser. Ce montre que vous comment le configurer dans Eclipse.


3 commentaires

C'est le fait que l'OP ne relie pas à la bibliothèque, et non le fait que les en-têtes ne peuvent pas être trouvés. Ceci est un Erreur de référence indéfinie LD non défini, pas un GCC Erreur des en-têtes manquantes.


Sûr. Mais je faisais référence au principe en général pour Eclipse.


Le préprocesseur C de GCC, utilisé par Eclipse, recherche des en-têtes, à tout le moins, dans / usr / include par défaut, les en-têtes ne sont presque jamais un problème.



18
votes

Vous devez définir le drapeau de la liaison de la bibliothèque pour la compilation dans la liaison, Vous pouvez obtenir une liste complète dans la console en exécutant xxx pré>

Voici les bibliothèques que vous avez installées sur votre système et que vous devez créer un lien avec ceux que vous souhaitez utiliser. Donc, dans votre exemple, il est libusb afin que vous fassiez p> xxx pré>

il devrait y avoir la sortie p> xxx pré>

ou p>

Project -> Properties -> C/C++
Build -> Miscellaneous -> flags


2 commentaires

Oui merci beaucoup :) J'ai suivi vos commandes et maintenant ça marche. En outre, j'ai une meilleure vue d'ensemble sur la façon de relier les bibliothèques .so aux compilateurs de GCC parce que j'ai programmé jusqu'à Java et je n'ai pas fait exactement comment faire cela. Mon drapeau pour la bibliothèque était -Lusb-1.0 Il y avait la seule différence


Compilé Heimdall, a eu une erreur, Modifier Heimdall / Cumakefiles / Heimdall.dir / link.txt Add -Lusb-1.0 Après avoir suivi ces instructions.



23
votes

J'ai fait face au même problème. Mais j'ai pu résoudre celui-ci en ajoutant '-Lusb-1.0' à la liaison.

E.g: g ++ myfile.cpp -lusb-1.0


1 commentaires

Habituellement, une telle chose se passe lorsque Libusb.so lien sur votre système (E.G. /USR/LIB/X86_64-LIB/X86_64-LIB/X86_64-LIB/X86_64-LILUX-GNU/LIBUSB.SO) sur une version antérieure de LibusB qui ne contient pas les symboles requis, par exemple. libusb-0.1.so.4. Vous pouvez vérifier où un lien pointe à l'aide de la commande `` `readlink ` `` `. Dans ce cas, il peut être question de modifier la source de rechercher une version spécifique.