在 Ubuntu 上针对 libusb-dev 进行编译
Posted
技术标签:
【中文标题】在 Ubuntu 上针对 libusb-dev 进行编译【英文标题】:Compiling against libusb-dev on Ubuntu 【发布时间】:2011-12-06 04:03:47 【问题描述】:我正在尝试编译 libusb 包提供的示例 libusb.c(如果你 dl 源代码。)
至少可以说是行不通的。
#include <stdio.h>
#include <sys/types.h>
#include <libusb/libusb.h>
这导致它失败,没有libusb/libusb.h
它是usb.h
,所以我改变了它。它以新的创新方式失败了。
我已经完全复制了文件,并将其命名为 example.c
我正在使用这些命令和变体:
gcc -o example example.c -lusb -L /usr/lib/libusb.a
gcc -o example example.c -lusb -L /usr/lib/libusb.so
我在编译时遇到的错误是:
example.c:25: error: expected ‘)’ before ‘*’ token
example.c: In function ‘main’:
example.c:46: error: ‘libusb_device’ undeclared (first use in this function)
example.c:46: error: (Each undeclared identifier is reported only once
example.c:46: error: for each function it appears in.)
example.c:46: error: ‘devs’ undeclared (first use in this function)
Line 25: static void print_devs(libusb_device **devs)
Line 46: libusb_device **devs;
起初我遵循了一个教程,但编译失败,方式或多或少相同,所以我决定尝试提供的示例,但失败了。
谁能帮帮我?解释我做错了什么,因为我迷失了这个。
【问题讨论】:
您复制了哪个文件并将其命名为 example.c? libusb-1.0.8/libusb-1.0.8/examples/lsusb.c 我将尝试在 ubuntu 上从头开始编译它,因为我最初使用的是 apt-get install libusb-dev跨度> 请注意,在 Ubuntu 11.04 中我可以通过apt-get source libusb-1.0-0
获得的 examples/lsusb.c
现在显然是 examples/listdevs.c。
【参考方案1】:
这是我在 Debian 上必须做的。它至少在 Ubuntu 中应该是相似的。
安装libusb-1.0-0-dev
代替:
#include <libusb/libusb.h>
做:
#include <libusb.h>
编译:
gcc example.c `pkg-config --libs --cflags libusb-1.0`
【讨论】:
超级酷,那行得通……我不知道 pkg-config --libs 等东西是什么意思。你能解释一下或者链接到一些文档吗? 谷歌它。这是非常有用的工具。无需手动添加编译标志,您只需指定所需的库,将它们传递给pkg-config
,它将输出所有必要的标志。`【参考方案2】:
请解释为什么您尝试用usb.h
替换libusb/libusb.h
失败:usb.h
是来自linux-headers
的标头,而不是来自libusb-dev
。你需要#include <libusb.h>
。
【讨论】:
这个答案完全不正确。 /usr/include/usb.h 不是来自 linux-headers(不是供用户空间链接的),而是旧 libusb-0.1 API 的包含文件,而 /usr/include/libusb-1.0/libusb .h 是较新的 libusb-1.0 API 的包含文件。它们不能直接互换。以上是关于在 Ubuntu 上针对 libusb-dev 进行编译的主要内容,如果未能解决你的问题,请参考以下文章
[PyImageSearch] Ubuntu16.04下针对OCR安装Tesseract