C 如何使用-lusb编译
有人能帮我编译下面的代码吗。他们说“用-lusb编译”。我不知道怎么做。原谅我的愚蠢:DC 如何使用-lusb编译,c,linux,C,Linux,有人能帮我编译下面的代码吗。他们说“用-lusb编译”。我不知道怎么做。原谅我的愚蠢:D #include <stdio.h> #include <usb.h> main(){ struct usb_bus *bus; struct usb_device *dev; usb_init(); usb_find_busses(); usb_find_devices(); for (bus = usb_busses; bus; bus = bus->next)
#include <stdio.h>
#include <usb.h>
main(){
struct usb_bus *bus;
struct usb_device *dev;
usb_init();
usb_find_busses();
usb_find_devices();
for (bus = usb_busses; bus; bus = bus->next)
for (dev = bus->devices; dev; dev = dev->next){
printf("Trying device %s/%s\n", bus->dirname, dev->filename);
printf("\tID_VENDOR = 0x%04x\n", dev->descriptor.idVendor);
printf("\tID_PRODUCT = 0x%04x\n", dev->descriptor.idProduct);
}
}
#包括
#包括
main(){
结构usb_总线*总线;
结构usb_设备*dev;
usb_init();
usb_查找_总线();
usb_查找_设备();
用于(总线=usb_总线;总线;总线=总线->下一步)
用于(dev=bus->devices;dev;dev=dev->next){
printf(“正在尝试设备%s/%s\n”,总线->目录名,开发->文件名);
printf(“\tID\u VENDOR=0x%04x\n”,dev->descriptor.idVendor);
printf(“\tID\u PRODUCT=0x%04x\n”,dev->descriptor.idProduct);
}
}
我能够成功编译并运行您的程序
首先,关于-lusb
,您应该知道三件事
意味着它是编译器的一个选项,在我的例子中,我使用的是-
gcc
- 前缀为
的usb
意味着它是一个外部库,我们正在编译这个程序l
是库名称,与usb
关联(usb是usb.h,不包括其后缀)#include
gcc usb.c -o usb -lusb
我使用的是
gcc4.7.3
和libusb1.0.18
编辑:在源代码文件后正确指定-lusb。您需要将
-lusb
添加到gcc命令中:
gcc -Wall -o usb usb.c -lusb
他们说“使用-lusb编译”。
实际上,成功编译不需要库,但需要头文件。成功链接需要库。与您的问题无关,但您应该使用int main(void)
而不是main()
。您在说什么?命令没有顺序。它也可以是gcc-usb.c-Wall-lusb-o-usb。似乎你正在交谈的人删除了他们的评论。@DavidC.Rankin这绝对是一个命令。对于静态库,如果到目前为止命令行上的任何内容都不需要存档,则包含的对象文件将被丢弃。对于共享库,几年前的linux发行版现在使用--as needed标志运行链接器,这也将以几乎相同的方式放弃共享库。这一点理解得很好,但答案是在这里提出的问题的上下文中给出的,只有一个库,没有进一步的库依赖项。对于处理本身没有显式库依赖关系的标准so库的情况,命令行上出现-l
的位置无关紧要。如果您想要的库又依赖于其他库,则“是”重要的是,依赖项列在您想要的库之后。谢谢你的澄清,真的吗?它在这里建造得很好,没有任何问题。你安装了libusb吗?在命令提示下,尝试查找/usr/include/usb.h是否存在?检查您的库路径。你有libusb.so
?当我启动你的命令时,我会得到链接错误。我相信你应该替换一些东西。我编译的时候仍然有问题。它说(libusb.h:没有这样的文件或目录)。我已经下载了libusb如下“sudo apt get install libusb-1.0-0-dev”,你能给我一些建议吗@NuclearPeon@user3513915,尝试sudo apt get install libusb dev
@user3513915,或显式指定路径-I/usr/include/libusb-1.0
。我相信-lusb
参数必须跟在usb.c
参数后面,以便usb.c
中未解析的符号(实际上在生成的usb.o
中)可通过libusb
库解析。顺便提一下,
头名称和-lusb
库名称之间没有必要的关联;这是一个惯例。