2014-09-01 43 views
1

我想使用libusb运行一个与USB设备通信的项目。我已经在Linux上使用它,并且它在那里效果很好,所以我想在Windows上使用Cygwin运行它。我在Cygwin中安装了libusb for Windows和libusb,然后尝试编译它。事实证明,你需要pciutils,而不像在Linux中很容易获得它。在Cygwin中,这是一个问题。在Cygwin上安装pciutils和生成文件错误

克服了一些困难后,我设法进一步完成了我在Cygwin环境中编译pciutil的目的。我按照以下步骤操作:

  1. 下载Windows的winio软件包,并转到Winio \ Binaries并将winio32.dll和winio32.sys复制到pciutil目录。
  2. 将config.h/mk从../win32复制到../lib
  3. 转到.. \ lib \ i386-io-winodws.h并将第39行更改为“lib = LoadLibrary(”WinIo32.dll “);”
  4. $ make
  5. make步骤不起作用。它向我展示了一个makefile错误,所以我试图在没有任何运气的情况下使用它。

我得到这个错误:

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 

我去的Makefile,线96,但我不明白怎么做才能改变那里使其工作(如果你愿意,我可以发布整个生成文件):

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

您使用的是32位或64位版本的Windows? – 2014-09-06 19:00:19

+0

我正在使用32位版本。 – user3365107 2014-09-08 06:30:46

回答

2

由于您使用的是32位版本的Windows,因此您可以使用pciutils的Cygwin端口。 win32子目录中的文件实际上是MinGW端口的文件,这就是为什么您会收到链接错误。

你应该做的第一件事情就是将源文件解包到一个新的目录中,这样你就可以从新开始。使用Cygwin编译它不需要您的更改和修改。请务必不要复制win32目录中的任何文件,他们不是必需的。也不要复制winio32文件,你也不需要它们。不要对任何文件进行任何更改。

接下来要做的是使用Cygwin的setup-x86.exe安装ioperm包。在搜索框中输入ioperm可以在所有其他包中快速找到它。安装完成后,从Cygwin提示运行ioperm -i以安装允许应用程序执行直接I/O的驱动程序。

下一页目录更改为你解开中的pciutils的全新副本,并从Cygwin的shell中运行以下命令:

make HOST=i386-pc-cygwin 

这应该是所有你需要做的,创建库和工具。

+0

It Worked !!,非常感谢! – user3365107 2014-09-10 07:14:17

+0

当我试图编译我的代码,在使用pci.h头,并且不能工作没有我遇到一个错误,pci.h丢失。 pciutuls编译,但我不知道为什么它没有链接到lpci。 – user3365107 2014-09-10 07:50:31

+1

尝试执行'make HOST = i386-pc-cygwin install'来安装libpci头文件和库。您可能需要以管理员身份运行该命令。编译代码时,可能需要使用'-I'和'-L'选项将编译器指向安装头文件和库的位置。 – 2014-09-10 17:01:06