可以被同时地2个独立的库链接到同一个可执行文件。
例如:如果你的应用程序有一个插件系统,允许用户动态加载一系列的模块到你的系统中,很可能2个独立的开发模块都使用了libusb。
libusb 允许多用户情况。2个libusb的“实例”不会发生冲突:libusb_set_debug() 被一个使用者调用不会影响相同设置的其他用户。其他用户可以在其中的一个调用libusb_exit()后继续使用libusb,等等。
这通过libusb的context 概念使之成为可行的。当你调用libusb_init()的时候,你可以(可选) 设定一个上下文context。然后将它用于接下来将要用到的libusb函数中。
为了保持简单应用程序的简单性,将NULL传递给需要上下文指针的参数是合法的 (只要你确定同一进城的其他代码不会尝试使用).。当你传递了NULL,默认的上下文参数将会被使用。当没有可用的上下文参数时,默认的上下文参数在第一次调用 libusb_init()时被创建。当调用libusb_exit()上下文参数会被销毁。
你可能会问为什么libusb中只有一小部分函数定义需要上下文指针。在内部, libusb 在其他对象中存储上下文指针 (例如:libusb_device 实例) ,因此可以在这些对象中得到上下文。