Как статически связать библиотеку для создания общей библиотеки - PullRequest
0 голосов
/ 17 сентября 2018

Я пытаюсь собрать общую библиотеку в Ubuntu Linux, которая зависит от libusb.

Я хочу статически связать libusb с моей общей библиотекой.

Теперь создайте libusb как статическую.

Теперь, когда я пытаюсь связать его с моей общей библиотекой, компоновщик выдает ошибку, говорящую, что я должен собрать libusb, используя флаг -fPIC.

Достаточно справедливо.

Итак, я собрал libusb с -fPIC - но потом заметил, что размер .so стал значительно меньше, предположительно, потому что он больше не создавал статическую библиотеку.

Но я смог успешно собрать свою общую библиотеку с помощью -fPIC-версии libusb.

Но когда мое приложение пытается загрузить мою общую библиотеку, динамический загрузчик выдает следующую ошибку:

ошибка поиска символа: неопределенный символ: udev_new

Почему-то я хочу статически связать libusb с моей общей библиотекой, чтобы избежать ошибок поиска символов такого типа, но я не могу найти правильную комбинацию параметров сборки gcc.

Может кто-нибудь помочь разобраться?

Спасибо.

1 Ответ

0 голосов
/ 17 сентября 2018

Вероятно, проблема заключается в том, что при ссылке в библиотеке libusb.a только символы в libusb, которые используются в вашей общей библиотеке, связаны с вашим общим объектом.

Чтобы обойти это, используйте флаг --whole-archive linker . Вместо того, чтобы просто использовать -lusb, используйте

 -Wl,--whole-archive -lusb -Wl,--no-whole-archive
...