From mboxrd@z Thu Jan 1 00:00:00 1970 Return-Path: Date: Thu, 17 Apr 2003 20:51:39 +0400 From: Sergey Vlasov To: community@altlinux.ru Message-Id: <20030417205139.1daef351.vsu@altlinux.ru> In-Reply-To: <200304172238.07023.viclists@mail.esoo.ru> References: <200304172112.50811.viclists@mail.esoo.ru> <20030417202337.0d00f5c0.vsu@altlinux.ru> <200304172238.07023.viclists@mail.esoo.ru> X-Mailer: Sylpheed version 0.8.11 (GTK+ 1.2.10; i586-alt-linux-gnu) Mime-Version: 1.0 Content-Type: text/plain; charset=KOI8-R Content-Transfer-Encoding: 8bit Subject: [Comm] Re: shared and static libs Sender: community-admin@altlinux.ru Errors-To: community-admin@altlinux.ru X-BeenThere: community@altlinux.ru X-Mailman-Version: 2.0.9 Precedence: bulk Reply-To: community@altlinux.ru List-Unsubscribe: , List-Id: List-Post: List-Help: List-Subscribe: , List-Archive: Archived-At: List-Archive: List-Post: On Thu, 17 Apr 2003 22:38:07 +0600 vic ismakaev wrote: > 17 Апрель 2003 22:23, Sergey Vlasov написал: > > On Thu, 17 Apr 2003 21:12:50 +0600 > > > > vic ismakaev 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).