2014-09-01 2 views
1

Je souhaite exécuter un projet qui communique avec un périphérique USB à l'aide de libusb. Je l'ai déjà sur Linux, et ça marche très bien, donc je veux l'exécuter sous Windows avec Cygwin. J'ai installé libusb pour Windows et libusb dans Cygwin, puis essayé de le compiler. Il s'avère que vous avez besoin de pciutils, contrairement à Linux dans lequel il est vraiment facile de l'obtenir. Dans Cygwin, c'est un problème. Après avoir surmonté certaines difficultés, j'ai réussi à aller plus loin avec mon but de compiler pciutil dans l'environnement Cygwin. J'ai suivi ces étapes:Installation de pciutils sur l'erreur Cygwin et makefile

  1. Télécharger le package winio pour Windows et est allé à Winio \ Binaries et a copié winio32.dll et winio32.sys dans le répertoire pciutil.
  2. Copie config.h/mk de ../win32 à ../lib
  3. Allez .. \ lib \ i386-io-winodws.h et de la ligne 39 à changement "lib = LoadLibrary (" WinIo32.dll ")"
  4. $ make
  5. L'étape make n'a pas fonctionné. Il m'a montré une erreur makefile, alors j'ai essayé de jouer avec ça sans aucune chance.

je suis arrivé cette erreur:

gcc lspci.o ls-vpd.o ls-caps.o ls-ecaps.o ls-kernel.o ls-tree.o ls-map.o common.o lib/libpci.a -o lspci 
lib/libpci.a(i386-ports.o):i386-ports.c:(.text+0x95): undefined reference to `_outpd' 
lib/libpci.a(i386-ports.o):i386-ports.c:(.text+0xd3): undefined reference to `_outpd' 
lib/libpci.a(i386-ports.o):i386-ports.c:(.text+0xf1): undefined reference to `_outpw' 
lib/libpci.a(i386-ports.o):i386-ports.c:(.text+0x110): undefined reference to `_outp' 
lib/libpci.a(i386-ports.o):i386-ports.c:(.text+0x170): undefined reference to `_outp' 
lib/libpci.a(i386-ports.o):i386-ports.c:(.text+0x184): undefined reference to `_outp' 
lib/libpci.a(i386-ports.o):i386-ports.c:(.text+0x1af): undefined reference to `_outp' 
lib/libpci.a(i386-ports.o):i386-ports.c:(.text+0x204): undefined reference to `_outpw' 
lib/libpci.a(i386-ports.o):i386-ports.c:(.text+0x218): undefined reference to `_outp' 
lib/libpci.a(i386-ports.o):i386-ports.c:(.text+0x242): undefined reference to `_outp' 
lib/libpci.a(i386-ports.o):i386-ports.c:(.text+0x259): undefined reference to `_outpd' 
lib/libpci.a(i386-ports.o):i386-ports.c:(.text+0x2d5): undefined reference to `_outpd' 
lib/libpci.a(i386-ports.o):i386-ports.c:(.text+0x30c): undefined reference to `_inpd' 
lib/libpci.a(i386-ports.o):i386-ports.c:(.text+0x328): undefined reference to `_inpw' 
lib/libpci.a(i386-ports.o):i386-ports.c:(.text+0x348): undefined reference to `_inp' 
lib/libpci.a(i386-ports.o):i386-ports.c:(.text+0x3b2): undefined reference to `_outp' 
lib/libpci.a(i386-ports.o):i386-ports.c:(.text+0x3c6): undefined reference to `_outp' 
lib/libpci.a(i386-ports.o):i386-ports.c:(.text+0x3ed): undefined reference to `_outp' 
lib/libpci.a(i386-ports.o):i386-ports.c:(.text+0x417): undefined reference to `_inpw' 
lib/libpci.a(i386-ports.o):i386-ports.c:(.text+0x42f): undefined reference to `_outp' 
lib/libpci.a(i386-ports.o):i386-ports.c:(.text+0x447): undefined reference to `_inp' 
lib/libpci.a(i386-ports.o):i386-ports.c:(.text+0x457): undefined reference to `_inpd' 
lib/libpci.a(i386-ports.o):i386-ports.c:(.text+0x65a): undefined reference to `_outp' 
lib/libpci.a(i386-ports.o):i386-ports.c:(.text+0x666): undefined reference to `_inpd' 
lib/libpci.a(i386-ports.o):i386-ports.c:(.text+0x67c): undefined reference to `_outpd' 
lib/libpci.a(i386-ports.o):i386-ports.c:(.text+0x688): undefined reference to `_inpd' 
lib/libpci.a(i386-ports.o):i386-ports.c:(.text+0x69f): undefined reference to `_outpd' 
lib/libpci.a(i386-ports.o):i386-ports.c:(.text+0x6c3): undefined reference to `_outpd' 
lib/libpci.a(i386-ports.o):i386-ports.c:(.text+0x729): undefined reference to `_outp' 
lib/libpci.a(i386-ports.o):i386-ports.c:(.text+0x73d): undefined reference to `_outp' 
lib/libpci.a(i386-ports.o):i386-ports.c:(.text+0x751): undefined reference to `_outp' 
lib/libpci.a(i386-ports.o):i386-ports.c:(.text+0x75d): undefined reference to `_inp' 
lib/libpci.a(i386-ports.o):i386-ports.c:(.text+0x778): undefined reference to `_inp' 
collect2: error: ld returned 1 exit status 
Makefile:96: recipe for target 'lspci' failed 
make: *** [lspci] Error 1 

Je suis allé à la Makefile, la ligne 96, mais je ne comprenais pas ce qu'il faut changer là-bas pour le faire fonctionner (si vous voulez, je peux afficher aussi le fichier makefile entier):

%: %.o 
    $(CC) $(LDFLAGS) $(TARGET_ARCH) $^ $(LDLIBS) -o [email protected] 
+0

Utilisez-vous une version 32 bits ou 64 bits de Windows? –

+0

J'utilise la version 32 bits. – user3365107

Répondre

2

Puisque vous utilisez une version 32 bits de Windows, vous pouvez utiliser le port Cygwin de pciutils. Les fichiers dans le sous-répertoire win32 sont en fait pour le port MinGW, et c'est pourquoi vous obtenez les erreurs de lien.

La première chose à faire est de déballer les fichiers source dans un nouveau répertoire afin de pouvoir commencer à partir de rien. Vos modifications et modifications ne sont pas nécessaires pour le compiler en utilisant Cygwin. Assurez-vous de ne copier aucun fichier dans le répertoire win32 cette fois, ils ne sont pas nécessaires. Ne copiez pas non plus les fichiers winio32, vous n'en avez pas non plus besoin. N'apportez aucune modification à l'un des fichiers.

La prochaine chose à faire est d'installer le package ioperm en utilisant le setup-x86.exe de Cygwin. Tapez ioperm dans la boîte de recherche pour le trouver rapidement parmi tous les autres paquets. Une fois installé, exécutez ioperm -i à partir de l'invite Cygwin pour installer le pilote qui permet aux applications d'effectuer des E/S directes.

changer le répertoire suivant à l'endroit où vous avez décompressé la nouvelle copie de pciutils et exécutez la commande suivante à partir du shell Cygwin:

make HOST=i386-pc-cygwin 

Cela devrait être tout ce que vous devez faire pour créer la bibliothèque et les services publics.

+0

Cela a fonctionné !!, Merci beaucoup! – user3365107

+0

quand j'ai essayé de compiler mon code que dans l'utilisation des en-têtes pci.h et ne peut pas fonctionner sans que je rencontre une erreur que pci.h est manquant. pciutuls a été compilé mais je ne sais pas pourquoi il n'est pas lié à lpci. – user3365107

+1

Essayez de faire 'make HOST = i386-pc-cygwin install' pour installer les bibliothèques et fichiers d'en-tête libpci. Vous devrez peut-être exécuter cette commande en tant qu'administrateur.Lors de la compilation de votre code, vous devrez peut-être pointer le compilateur aux emplacements où les en-têtes et les bibliothèques ont été installés en utilisant les options '-I' et' -L'. –