Writing and Compiling C Program in Linux Part 2: Using Custom Library
Instead of building custom function in a C program, we can include any custom function into a custom library. In this way, we could reuse the custom function between different program.
First, we maintain the same main(), but we remove all custom financial functions. Instead we included a statement included “fin.h” so that the compiler will search for the header file.
int main (void)
printf ("Please enter the following:\n");
printf ("Rate of return:(In decimal 50%% is 0.5)");
scanf ("%lf", &myrate);
printf ("Number of terms:(No decimals): ");
scanf ("%d", &myterm);
printf ("The principal amount: ");
scanf ("%lf", &myprincipal);
myreturn = tvm (myrate, myterm, myprincipal);
printf ("Your return after %d term is $%.2lf.\n", myterm, myreturn);
Next, we create a header file (“fin.h”) that will include all financial functions in the future.
double tvm (double rate, int terms, double principal);
Finally, we create a new program call finfn.c (as in financial function). The custom function will be place here.
double tvm (double rate, int terms, double principal)
dn = terms;
pp = pow (1+rate, dn);
return principal * pp;
The purpose splitting the program is such that tvm function can be reuse as a custom library in another program.
We can compile all the program
#gcc -Wall tvm.c finfn.c -o tvm –lm However, we don’t have to compile finfn.c every time of there is no changes.
One way is to create an object file during compilation instead of create executable.
We compile finfn.c first:
#gcc -Wall -c finfn.c -o finlib.o With the object file available, we can create another program tvm2 using the same tvm function:
int main (void)
double rate = 0.025;
int term = 10;
double principal = 1000;
double result = 0;
result = tvm (rate, term, principal);
printf ("The return of $1000 investment with a rate of 2.5 percent in 10 years will give you $%.2lf.\n", result);
Then we compile tvm2.c first before linking:
#gcc -Wall -c tvm2.c -o tvm2.o
We can link both program as follows:
#gcc tvm.o finlib.o -lm -o tvm
#gcc tvm2.o finlib.o -lm -o tvm2
In the example, we compile 2 programs using the custom function in one object file.
Alternatively, we can compile straight from tvm2.c to executable like below:
#gcc -Wall tvm2.c finlib.o -lm -o tvm2