Elektroda.pl
Elektroda.pl
X

Search our partners

Find the latest content on electronic components. Datasheets.com
Please add exception to AdBlock for elektroda.pl.
If you watch the ads, you support portal and users.

[C++] Libusb, konfiguracja Visual Studio

max7532 17 Jul 2012 19:15 3573 4
  • #1
    max7532
    Level 10  
    Witam,

    Od kilku dni walczę z biblioteką libusb, wygląda to tak:

    Na początku zainstalowałem libusb-win32-0.1-1.2.6.0, przy konfiguracji Visual Studio 2008 ( sprawdzałem też na 2010) C++, dodawałem ścieżkę do w Properties->C/C++->Additional Include Directories :
    C:\Users\dom\Desktop\libusb-win32-src-1.2.6.0\src
    następnie w Properties->Linker->General->Additional Library Directories :
    C:\Users\dom\Desktop\libusb-win32-src-1.2.6.0\lib\msvc
    oraz w Properties->Linker->Input->Additional Dependancies :
    libusb.lib
    W projekcie dodaję :
    #include "usbi.h"
    i jest wszystko w porządku,

    Natomiast teraz muszę zaprzęgnąć bibliotekę libusb-1.0, która pozwala na obsługiwanie eventów z biblioteką libevent
    A dokładniej chcę zrobić jak na stronie :
    http://stackoverflow.com/questions/5852742/how-to-use-libusb-with-libevent
    Problem jest taki, że jak ściągam paczkę ( dokładnie wersję najnowszą libusb-1.0.9 ) to nie ma w niej biblioteki libusb.lib.
    Próbowałem dodawać tą wcześniejszą bibliotekę od libusb-win32-0.1-1.2.6.0 ( wpisywałem ścieżkę oraz nazwę libusb.lib jak wcześniej) oraz w projekcie dodaję :
    #include "libusb.h" ,
    program wygląda następująco :
    Code: c
    Log in, to see the code


    [libusb.h jest załączony w stdafx.h]

    Powoduje to następujące błędy:
    Quote:

    1>usbnew1.obj : warning LNK4248: unresolved typeref token (0100000B) for 'libusb_context'; image may not run
    1>usbnew1.obj : error LNK2028: unresolved token (0A000009) "extern "C" int __stdcall libusb_init(struct libusb_context * *)" (?libusb_init@@$$J14YGHPAPAUlibusb_context@@@Z) referenced in function "int __cdecl main(void)" (?main@@$$HYAHXZ)
    1>usbnew1.obj : error LNK2019: unresolved external symbol "extern "C" int __stdcall libusb_init(struct libusb_context * *)" (?libusb_init@@$$J14YGHPAPAUlibusb_context@@@Z) referenced in function "int __cdecl main(void)" (?main@@$$HYAHXZ)


    Dużo szukałem na ten temat w necie, lecz za dużo nie znalazłem.
    Macie może jakiś pomysł, co mógłbym zrobić ?

    Z góry dzięki za odpowiedź.
  • #2
    mickpr
    Level 39  
    A nie możesz dodać całego projektu libusb jako pod-projekt i kompilować go bezpośrednio jako jeden z modułów programu - bez pośrednictwa biblioteki (w formie pliku lib)? Pamiętaj - że powinieneś dodać całe źródła libusb.

    Podmiana samej biblioteki (lib) między wersjami (zachowując stare "libusb.h") jest rozwiązaniem z gruntu niepoprawnym (stąd te komunikaty: "unresolved external").
  • #3
    max7532
    Level 10  
    Dzięki bardzo za szybką odpowiedź,

    Dodałem wszystkie miejsca gdzie znajdują się biblioteki do projektu, lecz dalej jest problem, a co najciekawsze, ten sam, czyli jak by wcześniej tej biblioteki w ogóle nie brał pod uwagę, z tego wynika, że ten libusb.lib nie zawiera komend dla libusb-1.0, dobrze myślę?

    Wstawiam libusb.h
    Code: c
    Log in, to see the code


    Próbowałem znaleźć definicje funkcji, w paczce którą ściągam Link, lecz nie udało mi się.
  • #4
    mickpr
    Level 39  
    1. Wyrzuć libusb.lib i dodaj źródła biblioteki libusb do projektu.
    albo
    2. doprowadź do kompilacji libusb oddzielnie (do libusb.lib, którego oczekujesz), aby posiąść prawidłową (zgodną ze źródłami) bibliotekę wynikową (lib).

    Zadbaj o prawidłową kompilację (static/dynamic (dll), debugowanie/bez debugowania, multithreading/lub nie).
    Z pewnych względów polecam jednak drugie rozwiązanie. Przykładowo: gdy będziesz chciał przejść na nowszą wersję biblioteki - wymieniasz tylko ją + include.
    Wersję którą przesłałeś bez problemu skompilowałem (static/debug) pod VS C++ Express 2010 (powstał plik libusb-1.0.lib).
  • #5
    max7532
    Level 10  
    Ok, jakoś udało mi się to zrobić, program już się kompiluje, dzięki bardzo za odpowiedzi.

    Mam jeszcze jedno pytanie, czy ktoś robił już obsługę eventów w połączeniu z Libusb w Visual Studio ? Dokładniej mówię o tym, że gdy urządzenie wysyła paczkę danych zostaje wtedy wykonany event w Visual Studio. Jeżeli tak, to byłbym wdzięczny za każdą wskazówkę.

    Jedyne co do tej pory znalazłem to :
    http://stackoverflow.com/questions/5852742/how-to-use-libusb-with-libevent

    Z góry dzięki bardzo.