Evgenii B. Rudnyi, 2006-2008, (c) All rights reserved
The goal of this text is to make a small introduction to the compilation
process. We will make a library and then link the application code with the
library. It is assumed that the librarian is ar and the compiler
is gcc. The aim is to obtain rough understanding what steps will
be necessary when we go to real things.
The sample code is in example.tar.gz or you can browse it here.
It is assumed that the archive is already in the current directory.
$ tar zxvf example.tar.gz
The command creates directory example/lib with files
testlib.cpp and testlib.h and directory
example/app with file main.cpp. The goal is first
to compile and make the library and then link the application with the
library.
$ cd example/lib
$ gcc -c testlib.cpp
$ ar cr libtestlib.a testlib.o
The flag -c forces gcc to compile to the object
file without linking. The librarian makes a library from the object files.
gcc determines the programming language from the file extension
and then calls the required compiler automatically.
$ cd ../app
$ gcc -c -I../lib main.cpp
File main.cpp contains a pragma #include that
requires gcc to find the header testlib.h. In our
case, gcc does not know where the header is and we must use
-I to tell it. You can use -v to check what the
default directories are used by gcc to look for headers.
Now we want to convert the object file main.o to the
executable. Along this way, it is necessary to link it with the library
libtestlib.a. The right command is as follows:
$ g++ -o main main.o -L../lib -ltestlib
The flag -o specifies the name of the binary. By default it
is a.out (a.exe in Cygwin). The flag
-L tells gcc where to search for the library and
the flag -l tells gcc with what a library to link. Note that
with -l we specify only the main part of the library name.
gcc uses by default many system libraries as well. You can use
-v to see what libraries are used and in what directories gcc is
looking for them. The reason to use g++ was that by default it
links with stdc++ and gcc does not.
$ ./main
or
$ ./main.exe
in Cygwin.
gcc: type in
$ man gcc
or
$ info gcc
or go to http://gcc.gnu.org/onlinedocs/
A good idea is also to search in Google for gcc tutorial. There are many of them.
ar: type in
$ man ar
or
$ info ar
Please post your comments, questions, suggestions to the discussion group at http://groups.google.com/group/matrixprogramming.