linux - 在 Cygwin 上安装 pciutils 和 makefile 错误

标签 linux makefile cygwin libusb

我想运行一个使用 libusb 与 USB 设备通信的项目.我已经在 Linux 上安装了它,并且在那里工作得很好,所以我想在 Windows 上使用 Cygwin 运行它.我在 Cygwin 中安装了适用于 Windows 的 libusb 和 libusb,然后尝试编译它。事实证明,您需要 pciutils,这与在 Linux 上很容易获得它不同。在 Cygwin 中这是个问题。

在克服了一些困难之后,我设法进一步实现了在 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. $制作
  5. 制作步骤无效。它向我显示了一个 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/

相关文章:

ruby-on-rails - 通过 cygwin 为 GITHUB 设置公钥/私钥

linux - Bash 字母数字列表生成

c - 在 makefile 中批量构建源代码

linux - 创建新的 cronjob 时出错

c - 使用 Makefile 取消定义预处理器变量

c++ - 调整 CMakeList.txt 以与 CUDA 一起运行

gcc - cygwin 中 gcc 的正确包名是什么?

python - 在 cygwin/win7 上安装 scipy

linux - Shell 脚本 CentOS - 通过读取它的配置文件并获取端口来终止进程

c - 制作 : command not found when specifying cross compiler path