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?
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
Super! Freut mich, dass es funktioniert –