LINUX.ORG.RU

.a vs .so


1

2

Пишу один проект, использую несколько больших статических библиотек. Время линковки при этом получается очень большое (40 секунд на текущий момент).

Можно ли как-то сделать такой .so на время отладки, в который статически будут слинкованы нужные библиотеки, а их функции будут доступны тем, кто будет использовать получившийся .so?

Иначе говоря: можно ли собрать несколько .a в один .so, экспортируя все символы?

★★★★★

можно. Сделай. В мануале к твоей системе сборки написано как.

anonymous ()

Извлечь из .a файлы .o и собрать их в .so

tailgunner ★★★★★ ()
Ответ на: комментарий от tailgunner

зачем извлекать? В рамках autotools это будет выглядеть примерно так:

lib_LTLIBRARIES = mycoollib.la
mycoollib_la_LDADD = path/to/lib1.a path/to/lib2.a ...

И всё. Как сделать во всяких cmake, scons и прочих - не знаю, надо читать доки по этим системам сборки.

Slavaz ★★★★★ ()
Ответ на: комментарий от Slavaz

Не все пользуются autotools и прочим. Ну и в любом случае полезно знать, как обойтись без них.

tailgunner ★★★★★ ()

Извлечение файлов .o:

ar x libmystaticlib1.a ar x libmystaticlib2.a

Сборка динамической либы:

ld -shared -o libmysharedlib.so *.o

Но требуется, чтобы изначальные .o файлы были скомпилены с -fPIC, иначе динамическая либа не соберётся.

ringill ()
Ответ на: комментарий от tailgunner

Не думаю, что кто-то пользуется в своих новых проектах голым make или даже своими скрипитами сборки.

Знать полезно, конечно, чтобы иметь представление как оно там происходит «под капотом», но лазить каждый раз «под капот» и вручную делать то, что уже давно происходит автоматичисеки - это моветон.

Slavaz ★★★★★ ()
Ответ на: комментарий от tailgunner

можно и без извлечения

ld -shared -s -o libxvidcore.so -whole-archive libxvidcore.a

XVilka ★★★★★ ()
Ответ на: комментарий от Slavaz

> Не думаю, что кто-то пользуется в своих новых проектах голым make

Я пользуюсь. Все эти autotools, cmake и прочее - кривые костыли, нужные для типа переносимых программ. Мне это просто не нужно.

tailgunner ★★★★★ ()
Ответ на: комментарий от Slavaz

У меня андроид, туть немного модифицированный голый make. Но библиотеки я тоже сам собирал, сейчас пытаюсь самую большую сделать динамической.

note173 ★★★★★ ()
Ответ на: комментарий от Slavaz

autotools - далеко не единственная, и уж, тем более, не самая передовая система сборки.

XVilka ★★★★★ ()
Ответ на: комментарий от XVilka

Я не конкретно автотулсы имею ввиду, а системы автоматизированной сборки в целом. cmake, scons, maven и т.д.

Slavaz ★★★★★ ()
Ответ на: комментарий от tailgunner

> Я пользуюсь. Все эти autotools, cmake и прочее - кривые костыли, нужные для типа переносимых программ. Мне это просто не нужно.

В некоторых частных случаях, конечно же, оправдана ручная сборка проекта. но это не должно быть правилом - скорее, исключением, подтверждающим правило. :)

Slavaz ★★★★★ ()

А второй вариант - сделать две *.so библиотеки, разница, имхо, небольшая

XVilka ★★★★★ ()

Можно даже вместо каждой .а собрать .so

annulen ★★★★★ ()
Ответ на: комментарий от Slavaz

Да, потом ставить штамп/значок «Ручной сборки», прямо как пельмени :)

XVilka ★★★★★ ()
Ответ на: комментарий от Slavaz

> оправдана ручная сборка проекта

ручная сборка никогда не оправдана. использование для сборки специального инструмента (make) оправдано почти всегда.

характерный размер моего мейкфайла — пять строк, причем для немаленького объема кода.

зачем мне все эти огромные глючные костыли, генерящие простыни нечитаемого бреда? чтобы мой использующий линуксовые системные вызовы код собрался на hp-ux?

anonymous ()
Ответ на: комментарий от anonymous

даже make позволяет проверять кучу условий и выставлять переменные. flashrom собирается на куче платформ, но использует только один Makefile

XVilka ★★★★★ ()
Ответ на: комментарий от Jetty

А это позволит уменьшить время линковки? Динамическая библиотека, похоже, это не решила - все еще целую минуту собирает. Наверное, зависит от количества экспортируемых и импортируемых функций (их очень много).

Кстати, есть еще возможность перенести эту библиотеку в проект и линковаться прямо к исходникам.

note173 ★★★★★ ()
Ответ на: комментарий от note173

Это поможет ускорить время компиляции, причем весьма здоровски.

Jetty ★★★★★ ()
Ответ на: комментарий от Jetty

Компиляция меня сейчас не волнует, так как занимает всего секунду. Да и на другом большом проекте без сторонних библиотек полная пересборка занимала около 10 минут, что вполне приемлимо.

Сейчас только разбираюсь с новой библиотекой и хочется иметь возможность часто делать мелкие изменения и смотреть результат.

note173 ★★★★★ ()
Вы не можете добавлять комментарии в эту тему. Тема перемещена в архив.