#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 не должны быть независимыми от позиции. Код, не зависящий от позиции, работает хуже, чем обычный код, нет?