Difference between revisions of "Linux Libraries"
From Teknologisk videncenter
m |
m |
||
Line 1: | Line 1: | ||
Linux Libraries comes in two forms: Static and shared. Static libraries are linked at compile time while shared libraries are linked at runtime. | Linux Libraries comes in two forms: Static and shared. Static libraries are linked at compile time while shared libraries are linked at runtime. | ||
=Static Libraries= | =Static Libraries= | ||
− | Static libraries link needed code from the object (.o) files or an archive of object files into the binary file. | + | Static libraries link needed code from the object (.o) files or an archive of object files into the binary file at compile time. See example below. |
==Static example== | ==Static example== | ||
Pack three files ''file1.c'', ''file2.c'' and ''file3.c'' to ''libfilearchive.a'' | Pack three files ''file1.c'', ''file2.c'' and ''file3.c'' to ''libfilearchive.a'' |
Revision as of 11:10, 23 December 2018
Linux Libraries comes in two forms: Static and shared. Static libraries are linked at compile time while shared libraries are linked at runtime.
Contents
Static Libraries
Static libraries link needed code from the object (.o) files or an archive of object files into the binary file at compile time. See example below.
Static example
Pack three files file1.c, file2.c and file3.c to libfilearchive.a
- file1.c is quite small
- file2.c contains a const array of one megabyte
- file3.c contains a const array of two megabyte
File1.c
//Author: Henrik Thomsen <heth@mercantec.dk>
//Name: file1.c
#include <stdio.h>
#define MB 1024*1024
void p1( void ) {
// Initialize 1MB array first and last member
// so we are sure the array is not truncated.
const char txt[MB];// = {[0]=0x0ff, [MB-1]=0xff };
printf("I am file1\n");
printf("txt is %d bytes\n", sizeof(txt) );
}
File2.c
//Author: Henrik Thomsen <heth@mercantec.dk>
//Name: file2.c
#include <stdio.h>
void p2( void ) {
printf("I am file2\n");
}
File3.c
//Author: Henrik Thomsen <heth@mercantec.dk>
//Name: file3.c
#include <stdio.h>
#define MB 1024*1024
void p3( void ) {
// Initialize 2MB array first and last member
// so we are sure the array is not truncated.
const char txt[MB*2] = {[0]=0x0ff, [sizeof(txt)-1]=0xff };
printf("I am file3\n");
printf("txt is %d bytes\n", sizeof(txt) );
}
Creating libfilearchive.a
Notice the size of the object files from and the size of the .a archivefile. It contains all three .o files.
[heth@localhost ]$ gcc -c file1.c
[heth@localhost ]$ gcc -c file2.c
[heth@localhost ]$ gcc -c file3.c
[heth@localhost ]$ ar rc libfilearchive.a file1.o file2.o file3.o
[heth@localhost ]$ ls -l
-rw-rw-r--. 1 heth heth 334 Dec 23 10:32 file1.c
-rw-rw-r--. 1 heth heth 1050248 Dec 23 10:32 file1.o
-rw-rw-r--. 1 heth heth 125 Dec 23 10:26 file2.c
-rw-rw-r--. 1 heth heth 1496 Dec 23 10:31 file2.o
-rw-rw-r--. 1 heth heth 345 Dec 23 10:39 file3.c
-rw-rw-r--. 1 heth heth 2098824 Dec 23 10:40 file3.o
-rw-rw-r--. 1 heth heth 3150842 Dec 23 10:40 libfilearchive.a
</source>