Ответ 1
Если вы хотите создать общую библиотеку, вы можете использовать это:
Вы можете использовать флаг -whole-archive из ld:
- весь-архив
Для каждого архива, указанного в командной строке после опции -whole-archive, включайте каждый объектный файл в архив в ссылке, а не поиск в архиве необходимых файлов объектов. Обычно это используется для превращения архивного файла в общую библиотеку, заставляя каждый объект быть включенным в итоговую общую библиотеку. Эта опция может использоваться несколько раз.Две заметки при использовании этой опции из gcc: во-первых, gcc не знает об этой опции, поэтому вам нужно использовать -Wl, -all-archive. Во-вторых, не забудьте использовать -Wl, -no-whole-archive после списка архивов, потому что gcc добавит свой собственный список архивов к вашей ссылке, и вы можете не захотеть, чтобы этот флаг также влиял на них.
Для статических библиотек вам, возможно, придется сначала извлечь объекты.
Я нашел следующее для ar
gnu ar может произвольно создать тонкий архив, который содержит индекс символа и ссылки на исходные копии файлов-членов архивов. Такой архив полезен для создания библиотек для использования в локальной сборке, где ожидается, что перемещаемые объекты останутся доступными, и копирование содержимого каждого объекта будет только тратить время и пространство. Тонкие архивы также сплющены, так что добавление одного или нескольких архивов в тонкий архив будет добавлять элементы вложенного архива отдельно. Пути к элементам архива хранятся относительно самого архива.
Возможно, вы можете использовать такой тонкий архив.