Я пытаюсь скомпилировать сторонний код в общую библиотеку, поэтому я могу вызвать его из Python с помощью ctypes. Это мой первый раз, сознательно работая с общими библиотеками.Связывание ошибок при компиляции разделяемой библиотеки
Я строю код объекта с помощью:
gcc -c -fPIC -o elisa3-lib.o ../elisa3-lib.c
gcc -c -fPIC -o usb-comm.o ../usb-comm.c
Тогда я пытаюсь построить библиотеку:
gcc -shared -fPIC -Wl,-install_name,libelisa3.so -o libelisa3.so.1.0 elisa3-lib.o usb-comm.o -lc
И я получаю ошибки компоновщика, потому что ссылки usbcomm.c libusb.h:
#ifdef __APPLE__
#include </opt/local/include/libusb-1.0/libusb.h>
#endif
С ошибками:
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
Как правильно соединить ссылку? Нужно ли компилировать libusb в общую библиотеку, а также ссылку на -l?
Да, я смог заставить его работать следующим образом: 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
Удивительный! Рад, что я получил работу –