Warning: file_get_contents(/data/phpspider/zhask/data//catemap/2/linux/27.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
C 如何使用-lusb编译_C_Linux - Fatal编程技术网

C 如何使用-lusb编译

C 如何使用-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)

有人能帮我编译下面的代码吗。他们说“用-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)
    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
    是库名称,与
    #include
    关联(usb是usb.h,不包括其后缀)
我使用的命令:

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
库名称之间没有必要的关联;这是一个惯例。