Как статически связать библиотеку для создания общей библиотеки

Я пытаюсь создать общую библиотеку в 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
Другие вопросы по тегам