c - Raspberry Pi (armhf) 交叉编译器无法编译包含库(例如 usb.h)的 C 代码
问题描述
我需要控制 Raspberry Pi 1 B+ 的 USB 端口,以便在不物理访问机器/电缆的情况下断开/重新连接 USB 设备。
我发现hub-ctrl.c
这似乎很好(根据 raspberrypi.org 上的“Raspberry Pi B+ turn usb power off”主题),但必须对其进行编译。
而且我想从我的 Linux amd64 机器上完成它(这样我将来可以轻松编译其他东西),所以我需要一个交叉编译器(因为 Raspberry Pi 使用 ARM CPU)。
我正在使用abhiTronix/raspberry-pi-cross-compilers
哪个有效(一个简单的 Hello World C 代码可以在 Raspberry Pi 上编译和运行就可以了)。
但是,hub-ctrl.c
编译失败是因为 C 代码需要外部包含:#include <usb.h>
.
$ wget https://raw.githubusercontent.com/codazoda/hub-ctrl.c/master/hub-ctrl.c
$ arm-linux-gnueabihf-gcc hub-ctrl.c -o hub-ctrl -lusb
hub-ctrl.c:12:10: fatal error: usb.h: No such file or directory
12 | #include <usb.h>
| ^~~~~~~
compilation terminated.
我确实libusb
为两种架构安装了开发包(在我的编译计算机上):
$ dpkg -l | grep libusb
ii libusb-0.1-4:amd64 2:0.1.12-32 amd64 userspace USB programming library
ii libusb-1.0-0:amd64 2:1.0.22-2 amd64 userspace USB programming library
ii libusb-1.0-0:armhf 2:1.0.22-2 armhf userspace USB programming library
ii libusb-1.0-0-dev:amd64 2:1.0.22-2 amd64 userspace USB programming library development files
ii libusb-1.0-0-dev:armhf 2:1.0.22-2 armhf userspace USB programming library development files
ii libusb-1.0-doc 2:1.0.22-2 all documentation for userspace USB programming
我不明白如何告诉编译器它应该使用它(以及从哪个地方)。
安装的一部分abhiTronix/raspberry-pi-cross-compilers
设置了LD_LIBRARY_PATH
变量,但它不指向库文件所在的位置。
更新 1:
正如评论中所要求的,这里是libusb-1.0-0-dev
软件包安装的文件列表:
$ dpkg -L libusb-1.0-0-dev:armhf
/.
/usr
/usr/include
/usr/include/libusb-1.0
/usr/include/libusb-1.0/libusb.h
/usr/lib
/usr/lib/arm-linux-gnueabihf
/usr/lib/arm-linux-gnueabihf/libusb-1.0.a
/usr/lib/arm-linux-gnueabihf/pkgconfig
/usr/lib/arm-linux-gnueabihf/pkgconfig/libusb-1.0.pc
/usr/share
/usr/share/doc
/usr/share/doc/libusb-1.0-0-dev
/usr/share/doc/libusb-1.0-0-dev/README
/usr/share/doc/libusb-1.0-0-dev/changelog.Debian.gz
/usr/share/doc/libusb-1.0-0-dev/changelog.gz
/usr/share/doc/libusb-1.0-0-dev/copyright
/usr/lib/arm-linux-gnueabihf/libusb-1.0.so
另外,我拥有的“usb”文件:
$ find / -iname "*usb*" | grep arm
/usr/lib/arm-linux-gnueabihf/libusb-1.0.so
/usr/lib/arm-linux-gnueabihf/libusb-1.0.so.0.1.0
/usr/lib/arm-linux-gnueabihf/libusb-1.0.so.0
/usr/lib/arm-linux-gnueabihf/libusb-1.0.a
/usr/lib/arm-linux-gnueabihf/pkgconfig/libusb-1.0.pc
# Omitting linux-headers, dpkg and apt paths
/opt/cross-pi-gcc-9.3.0-0/arm-linux-gnueabihf/libc/usr/include/sound/usb_stream.h
/opt/cross-pi-gcc-9.3.0-0/arm-linux-gnueabihf/libc/usr/include/linux/usb
/opt/cross-pi-gcc-9.3.0-0/arm-linux-gnueabihf/libc/usr/include/linux/usbdevice_fs.h
/opt/cross-pi-gcc-9.3.0-0/arm-linux-gnueabihf/libc/usr/include/linux/usbip.h
更新 2:
根据这个其他 StackOverFlow 问题,因为源代码使用#include <usb.h>
我应该使用libusb-dev
Debian 包而不是libusb-1.0-0-dev
.
我做到了,但没有改变编译结果:
$ apt-get install libusb-dev:armhf
$ dpkg -L libusb-dev:armhf
/.
/usr
/usr/bin
/usr/bin/libusb-config
/usr/include
/usr/include/usb.h
/usr/lib
/usr/lib/arm-linux-gnueabihf
/usr/lib/arm-linux-gnueabihf/libusb.a
/usr/lib/arm-linux-gnueabihf/libusb.so
/usr/lib/arm-linux-gnueabihf/pkgconfig
/usr/lib/arm-linux-gnueabihf/pkgconfig/libusb.pc
# Omitting "/usr/share/doc" and "/usr/share/man"
解决方案
推荐阅读
- linux - 如何在服务器上提交更改并从代码存储库中提取更新而不会发生冲突?
- javascript - Jinja功能不断更新
- sdk - Flutter 光栅崩溃:FontStyle::registerLanguageList 中的 recursive_mutex 解锁崩溃
- zigbee - 使用 USRP Source 检测 Telosb 排放
- python - 如何使用 open cv 在窗口中打印消息
- c# - 如何模拟(MOQ)已密封设置 AbstractAcquireTokenParameterBuilder 的 IConfidentialClientApplication?
- git - Git 偏移 PowerShell 中的文本
- vb.net - 从 Sharepoint 下载空白和 0KB 的文件
- amazon-web-services - 我如何在 aws _route_table 中做动态路由?
- php - 如何根据 Laravel 中的选定选项在 mysql 数据库的文本框中显示数据