Общие библиотеки ELF

#shared-libraries #elf

#разделяемые библиотеки #elf

Вопрос:

У меня вопрос об использовании библиотек в Linux. Допустим, у меня есть программа под названием MYPROG и две библиотеки LIBABC.ТАК и LIBXYZ.SO . MYPROG загружает модуль LIBABC.ТАК и с «dlopen RTLD_NOW». «dlopen» завершается с ошибкой, потому что я использую функции LIBXYZ.ТАК и MYPROG не был связан с LIBXYZ.SO . Могу ли я связать общую библиотеку с другой общей библиотекой?

Ответ №1:

Конечно. Если вы работаете ldd с существующими библиотеками (например, в /usr/lib/ ), вы увидите, что многие из них связаны с другими библиотеками, и, если не указано иное, разделяемая библиотека будет, по крайней мере, связана с библиотекой времени выполнения C.

Когда вы создаете libABC.so , свяжите его с libXYX.so , в качестве примера с использованием gcc:

 gcc -shared -o libABC.so  -lXYZ obj1.o obj2.o
  

Комментарии:

1. И зачем мне нужна опция -fpic . Библиотеки DLL Windows не должны быть независимыми от позиции. Код, не зависящий от позиции, работает хуже, чем обычный код, нет?