Могу ли я заставить gcc игнорировать статические библиотеки при компоновке разделяемых библиотек?

Я столкнулся с несколькими случаями создания проектов, в которых используются общие библиотеки или динамически загружаемые модули, где модуль / библиотека зависит от другой библиотеки, но не проверяет, доступна ли общая копия, прежде чем пытаться связать. Это приводит к тому, что объектные файлы из статического архива (.a файл) втягиваются в результирующий .so, и, поскольку эти объектные файлы не являются PIC, результирующий .so файл либо имеет TEXTREL (очень низкая производительность загрузки и использование памяти), либо вообще не работает ( на таких арках, как x86_64, которые не поддерживают разделяемые библиотеки, отличные от PIC).

Есть ли способ заставить драйвер компилятора gcc отказываться связывать код статической библиотеки с выводом общей библиотеки? Это кажется трудным и сложным из-за возможной необходимости линковать минимальные суммы из libgcc.a и тому подобного ...


person R.. GitHub STOP HELPING ICE    schedule 29.06.2011    source источник


Ответы (1)


Как вы знаете, вы можете использовать -static только для компоновки со статическими библиотеками, но, похоже, нет хорошего эквивалента линковке только с динамическими библиотеками.

Может быть полезен следующий ответ ...

Как связать с помощью GCC без -l и жесткого кодирования путь к библиотеке, которая не соответствует соглашению об именах libNAME.so?

Вы можете использовать -l: [имя библиотеки] .so, чтобы перечислить динамические библиотеки, с которыми вы хотите связать, в пути поиска вашей библиотеки. Указание окончания .so, вероятно, поможет только в случае вашей динамической библиотеки. Вероятно, вам придется указать полное имя с префиксом lib, а не только сокращенную версию.

person ricosrealm    schedule 29.06.2011