Terminalausgabe Testprogramm



  • Grüße Sie Forumteilnehmer,

    ich arbeite mich gerade in die libusb ein. Nun teste ich ein Programm und bekomme angefügte Fehlermeldung. Weiß in diesem Falle jemand weiter?

    Ausgabe angehangen.

    Fehlerausgabe



  • Die Fehlermeldung wurde dir zu 99% in Textform mitgeteilt, bitte poste sie auch als Text. Ich öffne jedenfalls nicht irgendwelche PDFs.



  • "Safety first" - wie Sie sagen -
    Ist nicht irgendein pdf - ist das pdf mit der Fehlermeldung die kommt.

    Aber danke für Ihre Unterstützung bei der Problemlösung.


    Wie schreibt man denn die Ausgabe in eine Datei Ihrer Meinung?


    Beste Grüße



  • @Timo_R Copy&Paste geht mittlerweile auch von der Konsole oder von den Ausgabefenstern einer IDE.

    Also Copy aus der IDE/Konsole und Paste hier (und als Code markieren.)



  • Copy und Paste, geht bei mir nicht -

    aber anbei der Code (den ich aus stderr umleiten musste):

    TEST7.cpp: In function ‘int main()’:
    TEST7.cpp:33:29: warning: ‘void libusb_set_debug(libusb_context*, int)’ is deprecated: Use libusb_set_option instead [-Wdeprecated-declarations]
    libusb_set_debug(ctx, 3); //set verbosity level to 3, as suggested in the documentation
    ^
    In file included from TEST7.cpp:3:
    libusb.h:1325:18: note: declared here
    void LIBUSB_CALL libusb_set_debug(libusb_context *ctx, int level);
    ^~~~~~~~~~~~~~~~
    TEST7.cpp:33:29: warning: ‘void libusb_set_debug(libusb_context*, int)’ is deprecated: Use libusb_set_option instead [-Wdeprecated-declarations]
    libusb_set_debug(ctx, 3); //set verbosity level to 3, as suggested in the documentation
    ^
    In file included from TEST7.cpp:3:
    libusb.h:1325:18: note: declared here
    void LIBUSB_CALL libusb_set_debug(libusb_context *ctx, int level);
    ^~~~~~~~~~~~~~~~
    /usr/bin/ld: /tmp/ccj4sHfq.o: in function main': TEST7.cpp:(.text+0x27): undefined reference tolibusb_init'
    /usr/bin/ld: TEST7.cpp:(.text+0x83): undefined reference to libusb_set_debug' /usr/bin/ld: TEST7.cpp:(.text+0x96): undefined reference tolibusb_get_device_list'
    /usr/bin/ld: TEST7.cpp:(.text+0x144): undefined reference to libusb_free_device_list' /usr/bin/ld: TEST7.cpp:(.text+0x150): undefined reference tolibusb_exit'
    /usr/bin/ld: /tmp/ccj4sHfq.o: in function printdev(libusb_device*)': TEST7.cpp:(.text+0x199): undefined reference tolibusb_get_device_descriptor'
    /usr/bin/ld: TEST7.cpp:(.text+0x2c2): undefined reference to libusb_get_config_descriptor' /usr/bin/ld: TEST7.cpp:(.text+0x522): undefined reference tolibusb_free_config_descriptor'
    collect2: error: ld returned 1 exit status

    Woran könnte dies liegen? Eventuell schon Tipps aufgrund der Fehlermeldung, weiß nämlich nicht mehr weiter.
    Danke aber schon jetzt für Ihre Zeit.



  • Da fehlen dem Linker die ganzen libusb-Funktionen, d.h. du mußt diese Library zu den Linkeroptionen hinzufügen.

    PS: Falsches Unterforum



  • Erst einmal Dank für die Antwort.

    So ähnlich habe ich mir das gedacht - wie füge ich den eine Library zu den Linkoptionen hinzu?
    Anbei Quelltext von dem Testprogramm:

    
    #include <iostream>
    #include "stdio.h"
    #include "libusb.h"
    
    	using namespace std;
    
    	 
    
    	void printdev(libusb_device *dev); //prototype of the function
    
    	 
    
    	int main() {
    
    	    libusb_device **devs; //pointer to pointer of device, used to retrieve a list of devices
    
    	    libusb_context *ctx = NULL; //a libusb session
    
    	    int r; //for return values
    
    	    ssize_t cnt; //holding number of devices in list
    
    	    r = libusb_init(&ctx); //initialize a library session
    
    	    if(r < 0) {
    
    	        cout<<"Init Error "<<r<<endl; //there was an error
    
    	                return 1;
    
    	    }
    
    	    libusb_set_debug(ctx, 3); //set verbosity level to 3, as suggested in the documentation
    
                cnt = libusb_get_device_list(ctx, &devs); //get the list of devices
    
    	    if(cnt < 0) {
    
    	        cout<<"Get Device Error"<<endl; //there was an error
    
    	    }
    
    	    cout<<cnt<<" Devices in list."<<endl; //print total number of usb devices
    
    	        ssize_t i; //for iterating through the list
    
    	    for(i = 0; i < cnt; i++) {
    
    	                printdev(devs[i]); //print specs of this device
    
            }
    
    	        libusb_free_device_list(devs, 1); //free the list, unref the devices in it
    
    	        libusb_exit(ctx); //close the session
    
    	        return 0;
    
    	}
    
    	 
    	void printdev(libusb_device *dev) {
    
    	    libusb_device_descriptor desc;
    
    	    int r = libusb_get_device_descriptor(dev, &desc);
    
    	    if (r < 0) {
    
    	        cout<<"failed to get device descriptor"<<endl;
    
    	        return;
    
    	    }
    
    	    cout<<"Number of possible configurations: "<<(int)desc.bNumConfigurations<<"  ";
    
    	    cout<<"Device Class: "<<(int)desc.bDeviceClass<<"  ";
    
    	    cout<<"VendorID: "<<desc.idVendor<<"  ";
    
    	    cout<<"ProductID: "<<desc.idProduct<<endl;
    
    	    libusb_config_descriptor *config;
    
    	    libusb_get_config_descriptor(dev, 0, &config);
    
    	    cout<<"Interfaces: "<<(int)config->bNumInterfaces<<" ||| ";
    
    	    const libusb_interface *inter;
    
    	    const libusb_interface_descriptor *interdesc;
    
    	    const libusb_endpoint_descriptor *epdesc;
    
    	    for(int i=0; i<(int)config->bNumInterfaces; i++) {
    
    	        inter = &config->interface[i];
    
    	        cout<<"Number of alternate settings: "<<inter->num_altsetting<<" | ";
    
    	        for(int j=0; j<inter->num_altsetting; j++) {
    
    	            interdesc = &inter->altsetting[j];
    
    	            cout<<"Interface Number: "<<(int)interdesc->bInterfaceNumber<<" | ";
    
    	            cout<<"Number of endpoints: "<<(int)interdesc->bNumEndpoints<<" | ";
    
    	            for(int k=0; k<(int)interdesc->bNumEndpoints; k++) {
    
                            epdesc = &interdesc->endpoint[k];
    
    	                cout<<"Descriptor Type: "<<(int)epdesc->bDescriptorType<<" | ";
    
    	                cout<<"EP Address: "<<(int)epdesc->bEndpointAddress<<" | ";
    
    	            }
    
    	        }
    
    	    }
    
    	    cout<<endl<<endl<<endl;
    
    	    libusb_free_config_descriptor(config);
    
    	}
    
    


  • @Timo_R sagte in Terminalausgabe Testprogramm:

    So ähnlich habe ich mir das gedacht - wie füge ich den eine Library zu den Linkoptionen hinzu?

    Wie rufst du den Compiler auf, bzw. wie compilierst du?



  • Wie willst du denn mit Libs arbeiten, wenn du nicht weißt, wie du diese einbinden mußt?

    Da du NetBeans benutzt, gehe in die Projekteigenschaften unter "Build"->"Linker" und füge dort die Lib (+ Pfad) hinzu, s. NetBeans: Quickstart "Setting Project Properties".



  • Sehe ich nicht ganz so TH69 -

    Es handelt sich dabei doch nur um eine einfache c++ Quelldatei, kein Projekt o. ä. -
    Wo finde ich denn diese Projekteigenschaften? "Build" -> "Linker"

    Anbei ich benutze g++.



  • @Timo_R sagte in Terminalausgabe Testprogramm

    Anbei ich benutze g++.

    g++ ist der Compiler, NetBeans die IDE.



  • Wie Sie sagen, soll ich das jetzt bei einem Experten wie Ihnen auch ausführen?



  • Werter Herr, anbei wiederhole ich Ihre letzte Frage, da diese nicht verständlich zu seien scheint:

    @Timo_R sagte in Terminalausgabe Testprogramm:

    Wie Sie sagen, soll ich das jetzt bei einem Experten wie Ihnen auch ausführen?



  • Danke reicht schon,
    konstruktive Unterstützung hier - merk ich schon - Sache ist hochkomplex.



  • Meiner Meinung nach, mache ich irgendwas beim Kompilieren mit g++ falsch, da muss
    in der Zeile irgendwie die Bibliothek verlinkt werden.

    Aber Dankeschön



  • Rufst du denn den Compiler per Hand auf? Warum überläßt du das nicht der IDE?

    Ansonsten informiere dich mal über die gcc-Optionen -l und -L...



  • Uii, das hast du schon 17 Stunden nachdem @Th69 dir das gesagt hat realisiert?



  • @Jockelx - Das wollten Sie mir jetzt mitteilen?



  • Was man dir die ganze Zeit zu erklären versucht:
    Der Compiler macht alles richtig, er übersetzt dein Programm und erzeugt die passenden Objektdateien. Danach ist der Linker dran und soll das alles zusammenbauen, scheitert aber, weil er Funktionseinsprungspunkte nicht findet. Dazu gibt´s jetzt zwei Lösungen:

    1. Du nimmst alle libUSB Quelltextdateien in dein Projekt auf, dann werden sie vom Compiler übersetzt und an den Linker weitergereicht.
    2. Du teilst dem Linker mit, dass sich die Funktionen in einer Bibliothek befinden und der Linker sucht in dieser Bibliothek nach den Einsprungspunkten.

    Ich habe den Eindruck, dass du C++ Anfänger bist und (noch) nicht weißt, wie du die Frage zu deinem Problem formulieren sollst. Daher kam auch die Aufforderung, die Fehlermeldungen zu posten, weil man daraus genau erkennen kann, wo das Problem liegt.
    Dass du jetzt darauf bestehst, dass das Problem beim Compiler liegt zeigt, dass du das Problem nicht verstanden hast. Vielleicht solltest du einfach mal die dir hier gegebenen Ratschläge befolgen, denn die Leute hier wissen, wovon sie reden.



  • @Timo_R Ja.
    Ich verstehe halt nicht, wieso man eine Frage stellt, aber die Antworten nicht liest.



  • @DocShoe --- Einmal 2. bittesehr ---


Anmelden zum Antworten