[Comm] Re: shared and static libs

Sergey Vlasov =?iso-8859-1?q?vsu_=CE=C1_altlinux=2Eru?=
Чт Апр 17 20:51:39 MSD 2003


On Thu, 17 Apr 2003 22:38:07 +0600
vic ismakaev <viclists на mail.esoo.ru> wrote:

> 17 Апрель 2003 22:23, Sergey Vlasov написал:
> > On Thu, 17 Apr 2003 21:12:50 +0600
> >
> > vic ismakaev <viclists на mail.esoo.ru> wrote:
> > > Допустим есть две либы в двух ипостасях - статические(libname1.a,
> > > libname2.a) и динамическая(libname1.so,libname2.so).
> > > Можно ли ,и если можно -то как сказать gcc при сборке какие либы
> > > использовать статические или динамические.
> > > Про динамические вроде ясно
> > > gcc -rdynamic -lname1 -lname2 и он подхватит сошки.
> >
> > Кстати, в современных системах для сборки с динамическими библиотеками
> > вообще никаких ключей указывать не нужно. -Wl,--export-dynamic -
> > отдельная ситуация. 
> А чем определяется ее отдельность?

Это нужно, если в программе делается dlopen() для загрузки модулей,
которые используют функции из самой программы (а не из разделяемых
библиотек). Например, так работает apache (хотя сейчас в ALT он
собирается с выносом основного кода в libhttpd.so для совместимости с
чем-то (чем - не помню); вообще-то этот вариант в основном там сделан
для систем, не имеющих эквивалента --export-dynamic).

Хотя при сборке GTK+-приложений эта опция выставляется автоматом (с
расчётом на использование libgmodule - на самом деле её использует
libgtk).

> >В общем случае для переносимости лучше
> > использовать libtool.
> Понятно.
> > > А если статические?
> >
> > Для отдельных библиотек (сохранив динамические libc и т.п.) - просто
> > указать /path/libname1.a. 
> Или делать libname1_s.a, и потом -lname1_s? Так по идее тоже можно?

Можно (хотя в последнее время так делают всё реже и реже).

Ещё встречается суффикс _p (для библиотек, скомпилированных с -pg).



Подробная информация о списке рассылки community