Guys, would you describe a few things about c++ building blocks, on unix.
I want to create an application that links against static libs and dynamic libs (.so).
Question 1: How do I create static library using gcc/g++ ?How do I make my app link against it.
Question 2: How to specify it in the makefile, linking against static and dynamic libs, assuming that both libraries have header files
Summary: I have been using makefiles and libraries for years, written by someone else. Thus every time I modified it, I simply cut-and-pasted things around, without really understanding it. Now I want to get down to the ground and understand the building/linking/Creating Makfile process in-depth.
What is a good book describing these concepts in intimate details?
Thanks
Static libraries are usually archived with the ar
command. Once you build all of the object files (preferably with the -fPIC
switch on GCC), you can run ar
like so:
ar -rs archivename.a list.o of.o objects.o
The man
page describes the options.
Dynamic libraries are built usually with the -shared
switch to gcc
or ld
and the output file name with a .so
extension.
Autotools handles this with the libtool
program. I'm not familiar with its use.
Linking against these libraries can be done either by listing the libraries with the -l
(ell) switch (such as -lX
to link to libX.so
) or by specifying them directly with absolute paths (such as adding /usr/lib/libX.so
to your command). Static libraries are linked by specifying -static
before -l
or the appropriate absolute path to the .a
archive.