[Subject Prev][Subject Next][Thread Prev][Thread Next][Subject Index][Thread Index]

Re: what is the difference between shared and static libraries



Check man pages for sys_uselib & grep the kernel ;-)


Shankar Krishnamurthy wrote:

> Good explanation ... I would like to know
> how static and shared libraries are used when
> the program is running ( how kernel handles it ?)
> expecially things germane to symbol table building
> and addressing.
> it will be good if I can get some good material in web ...
>
> -KS
>
> Aravind Sadagopan wrote:
>
> > .Let me explain the difference (as asked umpteen times)
> >
> > STATIC LIBRARY
> > ===============
> > 1. Collection of one or more object files containing precompiled code
> > 2. Named with a ".a" extension
> > 3. Code in static libraries is linked in to the program at compile time
> >
> > ~~~~~~~~~~
> > 4. Becuase it is linked at compiled time the final executable size is much
> > larger.
> > 5. The advantage is that you dont have to go hunting around for dependencies,
> > your executable is an independent unit
> > 6.  for any change in library your code has to be recompiled
> >
> > Creating a static lib
> > ---------------
> > suppose your code is libramesh.c ..do the following
> >
> > gcc -c libramesh.c -o libramesh.o
> > ar rcs libramesh.a libramesh.o
> >
> > use nm libramesh.a to list the members of your libraray
> >
> > SHARED LIBRARY
> > ================
> > 1. Collection of object files containing precompiled code
> > 2. Name ".so.x" where x is a veriosn
> > 3. code in shared library is linked to program at run time
> > 4. Because it is linked at run time they offer lesser space
> > 5. They requiree fewer resources
> > 6. Use lesser system memory
> > 7. Disadvantage is you have to satisfy all the shared library dependencies..a
> > headache
> > 8. maintanence is easy
> >
> > Creating a shared lib
> > ----------------
> > gcc -fPIC -g -c libramesh.c -o libramesh.o
> > gcc -g -shared -Wl, -soname,libramesh.so -o libramesh.so.1.0 libramesh.o -lc
> >
> > Make sure your library path exists in LD_LIBRARY_PATH before using it :)
> >
> > Hope this explains it
> >
> > Cheers
> > Aravind S
> >
> > "Ramesh.S" wrote:
> >
> > > hi all,
> > >
> > > can anybody explain me the difference between the shared and static
> > > libraries.. both are going to be included before executoion..
> > > but even static libraries are also shared among rprograms know then why
> > > specifically two names are given.. i am not clear in this hting..
> > >
> > > also if i am writing a fucntion for converting a long value to  a string
> > > how to make is as a library... i heard that we can use
> > > ar archive.. but we have to compile it before or what.. if compiling means
> > > it should contain main().. then how can other program cna use that
> > > library..
> > > can anybody explain me from scratch.. i am very much interested in having
> > > my own libraries.. help me..
> > >
> > > ramesh
> > >
> > > _________________________________________________________
> > > Do You Yahoo!?
> > > Get your free @yahoo.com address at http://mail.yahoo.com
> > >
> > > ---------------------------------------------
> > > Find out more about this and other Linux India
> > > mailing lists at http://lists.linux-india.org/
> >
> > --
> > Living on Earth is expensive, but it does include a free trip
> > round the sun
> >
> > ---------------------------------------------
> > An alpha version of a web based tool to manage
> > your subscription with this mailing list is at
> > http://lists.linux-india.org/cgi-bin/mj_wwwusr
>
> ---------------------------------------------
> An alpha version of a web based tool to manage
> your subscription with this mailing list is at
> http://lists.linux-india.org/cgi-bin/mj_wwwusr