2017-01-16 4 views
0

Ich versuche, Code von Drittanbietern zu einer gemeinsam genutzten Bibliothek zu kompilieren, damit ich es aus Python mit Ctypes aufrufen kann. Dies ist das erste Mal, dass ich wissentlich mit geteilten Bibliotheken arbeite.Verknüpfen von Fehlern beim Kompilieren einer gemeinsam genutzten Bibliothek

Ich baue den Objektcode verwenden:

gcc -c -fPIC -o elisa3-lib.o ../elisa3-lib.c 
gcc -c -fPIC -o usb-comm.o ../usb-comm.c 

Dann versuche ich, die gemeinsam benutzte Bibliothek zu bauen:

gcc -shared -fPIC -Wl,-install_name,libelisa3.so -o libelisa3.so.1.0 elisa3-lib.o usb-comm.o -lc 

Und ich bekomme Linker Fehler, weil usbcomm.c Referenzen libusb.h:

#ifdef __APPLE__ 
    #include </opt/local/include/libusb-1.0/libusb.h> 
#endif 

Mit Fehler:

Undefined symbols for architecture x86_64: 
    "_libusb_bulk_transfer", referenced from: 
     _usb_send in usb-comm.o 
     _usb_receive in usb-comm.o 
    "_libusb_claim_interface", referenced from: 
     _openCommunication in usb-comm.o 
    "_libusb_close", referenced from: 
     _closeCommunication in usb-comm.o 
    "_libusb_exit", referenced from: 
     _closeCommunication in usb-comm.o 
    "_libusb_init", referenced from: 
     _openCommunication in usb-comm.o 
    "_libusb_open_device_with_vid_pid", referenced from: 
     _find_nrf_device in usb-comm.o 
    "_libusb_release_interface", referenced from: 
     _closeCommunication in usb-comm.o 
ld: symbol(s) not found for architecture x86_64 

Wie verbinde ich richtig? Muss ich libusb auch zu einer gemeinsam genutzten Bibliothek kompilieren und mit -l verknüpfen?

Antwort

1

"Nicht definierte Symbole" sind Funktionen/Variablen, die der Linker nicht finden kann. Kurz gesagt, ja, Sie müssen libusb als eine der Bibliotheken oder Objekte, in denen Sie verlinken, einbinden. Tun Sie, was einfacher oder besser geeignet ist.

+1

Ja, ich konnte es so funktionieren lassen: gcc -shared -fPIC -Wl, -install_name, libelisa3.so -o libelisa3.so elisa3-lib.o usb-comm.o -L/opt/local/lib -lusb-1.0 – user1336958

+0

Super! Freut mich, dass es funktioniert –

Verwandte Themen