Linking dynamic a static libraries
lrtaylor@micron.com
lrtaylor@micron.com
Mon Jan 17 17:46:00 GMT 2005
Roman,
-Bstatic and -Bdynamic are not option for GCC. They are linker options.
The -Wl in front of them tells GCC to pass them on to the linker.
When linking with static libraries, the entire library is not linked
into the executable. Rather, only the symbols/functions that are need
for the program to link correctly are included. So, you could be
including only a very small subset of the Sybase libraries in your code.
There's nothing wrong with that.
Thanks,
Lyle
-----Original Message-----
From: gcc-help-owner@gcc.gnu.org [mailto:gcc-help-owner@gcc.gnu.org] On
Behalf Of Roman Pagac
Sent: Sunday, January 16, 2005 9:51 AM
To: lrtaylor; eljay@adobe.com; gcc-help@gcc.gnu.org
Subject: RE: Linking dynamic a static libraries
Hi guys!
Thanks a lot for your answers. I have only two questions:
1. In GCC manual I have found completely different explanation of
compilation option -B (see
http://gcc.gnu.org/onlinedocs/gcc-3.4.3/gcc/Directory-Options.html#Direc
tory-Options
and I could not find explanation for option -Bstatic and -Bdynamic). I
am
using GCC 3.3.2 and OS SunOS rel. 5.9.
2. I am linking some static libraries (i.e. library code should be added
to
executable file or ?) but I think executable file size is too small (if
I
compare it with size of static libraries). Here is statement for
creating of
my executable:
gcc -o executable_name -v ObjectFile1.o ObjectFile2.o
-L/opt/sybase/OCS-12_0/lib
-L/opt/builds/libraries -lm -lsocket -lnsl -ldl -laio -W1,-Bstatic -lct
-lcs
-ltcl -lcomn -lintl -lblk -W1,-Bdynamic -W1,-Bstatic -ltmpsyb -lssclstd
-W1,-Bdynamic
Size of executable_name file is about 129KB. But static libraries which
I am
linking e.g. libct.a (1,032KB), libcs.a (122KB), libtcl.a (537KB),
libcomn.a
(749KB), libintl.a (82KB), libblk.a (166KB). Is it OK the size of the
executable? I thought that size of executable must be much bigger (if
you
look at sizes of the static libraries). Or am I doing (or understanding)
something wrong?
Thanks a lot for your help.
Regards,
Roman.
>From: lrtaylor@micron.com
>To: <eljay@adobe.com>, <roman_pagac@hotmail.com>,
<gcc-help@gcc.gnu.org>
>Subject: RE: Linking dynamic a static libraries
>Date: Thu, 13 Jan 2005 10:29:42 -0700
>
>Actually, you may want to put the static libraries last and then end
>your command line with a final -Wl,-Bdynamic:
>
>gcc -o myexecutable \
>-v \
>*.c \
>-Wl,-Bdynamic \
>-lfirst \
>-lsecond \
>-Wl,-Bstatic \
>-lthird \
>-Wl,-Bdynamic
>
>This is because if your dynamic libraries depend on symbols from your
>static libraries, they might not get picked up if you put the static
>libraries first. The final -Wl,-Bdynamic will allow it to link in the
>standard libraries normally.
>
>Thanks,
>Lyle
>
>
>-----Original Message-----
>From: gcc-help-owner@gcc.gnu.org [mailto:gcc-help-owner@gcc.gnu.org] On
>Behalf Of Eljay Love-Jensen
>Sent: Thursday, January 13, 2005 5:31 AM
>To: Roman Pagac; gcc-help@gcc.gnu.org
>Subject: Re: Linking dynamic a static libraries
>
>Hi Roman,
>
>With GCC, you should be able to do something like this:
>
>gcc -o myexecutable \
>-v \
>*.c \
>-Wl,-Bstatic \
>-lfirst \
>-lsecond \
>-Wl,-Bdynamic \
>-lthird
>
>The compiler will link to libfirst.a and libsecond.a (both static), and
>libthird.so and the support libraries (dynamic).
>
>The -v will display the magic-behind-the-curtains, and you'll see that
>the
>linker step is adding in (your mileage may vary) ...
>crt0.o, crtbegin.o, and crtend.o
>some compiler specific or system library paths
>-lstdc++
>-lgcc
>-lcygwin
>-luser32
>-lkernel32
>-ladvapi32
>-lshell32
>-lgcc
>
>You'll also see where the -Bstatic and -Bdynamic are affecting library
>linkage.
>
>HTH,
>--Eljay
>
>
>
_________________________________________________________________
Rozhodnite o tom, kto si s vami moze vymienat spravy a povedzte
priatelom o
MSN Messenger. http://messenger.msn.sk/
More information about the Gcc-help
mailing list