2013-11-26 2 views
0

У меня есть очень простой, голый минимум libusb например Going, который компилирует, но вывод производится по следующей программе:libusb: 11

#include <stdio.h> 
#include <stdlib.h> 
#include <libusb-1.0/libusb.h> 

int main(void) { 
    puts("Looking for USB devices..."); 

    libusb_device **devices; 
    libusb_context *context = NULL; 

    ssize_t device_count = 0; 

    device_count = libusb_get_device_list(context, &devices); 
    if(device_count < 0) { 
     puts("Unable to retrieve USB device list!"); 
    } 

    printf("%lu devices found\n", device_count); 

    return EXIT_SUCCESS; 
} 

выглядит следующим образом:

Looking for USB devices... 
Segmentation fault: 11 

неудача происходит по линии 13:

device_count = libusb_get_device_list(context, &devices);

I 'm работает над этим в Mac OS X 10.9 и имеет libusb версии 1.0.9, установленную через Homebrew.

Любая идея в чем проблема?

+3

Вы должны инициализировать этот контекст. – Mat

+2

Может быть, «контекст» должен указывать на некоторую память вместо «NULL». Проверьте код/​​документацию функции 'libusb_get_device_list' –

+0

Следуя примеру http://www.dreamincode.net/forums/topic/148707-introduction-to-using-libusb-10/ show, что = NULL является адекватной инициализацией для контекста , –

ответ

1

Код пропускает для инициализации context.

Позвоните libusb_init() перед любой операцией на libusb.

Добавьте строку, как это Перед составлением любого другого вызова в libusb:

int result = libusb_init(&context); 
if (0 > result) 
{ 
    fprintf(stderr, "libusb_init() failed with %d.\n", result); 
    exit(EXIT_FAILURE); 
} 
+0

Удивительный, исправленный! Спасибо за быстрый ответ! –