我想运行一个使用 libusb 与 USB 设备通信的项目.我已经在 Linux 上安装了它,并且在那里工作得很好,所以我想在 Windows 上使用 Cygwin 运行它.我在 Cygwin 中安装了适用于 Windows 的 libusb 和 libusb,然后尝试编译它。事实证明,您需要 pciutils,这与在 Linux 上很容易获得它不同。在 Cygwin 中这是个问题。
在克服了一些困难之后,我设法进一步实现了在 Cygwin 环境中编译 pciutil 的目的。我遵循了这些步骤:
- 下载适用于 Windows 的 winio 软件包并转到 Winio\Binaries 并将 winio32.dll 和 winio32.sys 复制到 pciutil 目录。
- 将 config.h/mk 从 ../win32 复制到 ../lib
- 转到 ..\lib\i386-io-winodws.h 并将第 39 行更改为“lib = LoadLibrary("WinIo32.dll");”
- $制作
- 制作步骤无效。它向我显示了一个 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 行,但我不明白要在那里更改什么才能使其正常工作(如果你愿意,我也可以发布整个 makefile):
%: %.o
$(CC) $(LDFLAGS) $(TARGET_ARCH) $^ $(LDLIBS) -o $@
最佳答案
由于您使用的是 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
创建库和实用程序所需要做的就是这些。
关于linux - 在 Cygwin 上安装 pciutils 和 makefile 错误,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/25607149/