Как статически связать библиотеку для создания общей библиотеки
Я пытаюсь создать общую библиотеку в Ubuntu Linux, которая зависит от libusb.
Я хочу статически связать libusb с моей общей библиотекой.
Теперь, так встроенный libusb как статический lib.
Теперь, когда я пытаюсь связать его с моей общей библиотекой, компоновщик выдает ошибку, говорящую, что я должен собрать libusb, используя флаг -fPIC.
Справедливо.
Поэтому я создал libusb с -fPIC - но потом заметил, что размер.so стал значительно меньше, предположительно, потому что он больше не создавал статическую библиотеку.
Но я смог успешно собрать свою общую библиотеку с помощью -fPIC-версии libusb.
Но когда мое приложение пытается загрузить мою разделяемую библиотеку, динамический загрузчик выдает следующую ошибку:
ошибка поиска символа: неопределенный символ: udev_new
Почему-то я хочу статически связать libusb с моей общей библиотекой, чтобы избежать ошибок поиска символов такого типа, но я не могу найти правильную комбинацию параметров сборки gcc.
Может кто-нибудь помочь разобраться?
Спасибо.
1 ответ
Вероятно, проблема заключается в том, что при ссылке в библиотеке libusb.a только символы в libusb, которые используются в вашей общей библиотеке, связаны с вашим общим объектом.
Чтобы обойти это, используйте флаг компоновщика --whole-archive. Вместо того, чтобы просто использовать -lusb
использовать
-Wl,--whole-archive -lusb -Wl,--no-whole-archive