Difference between revisions of "Linux Libraries"
From Teknologisk videncenter
(Created page with "Linux Libraries comes in two forms: Static and shared. =Static Libraries= Static libraries link needed code from the object (.o) files or an archive of object files into the b...") |
m |
||
Line 2: | Line 2: | ||
=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. | ||
+ | ==Static example== | ||
+ | Pack two files '''file1.c''' and '''file2.c''' to '''libfilearchive.a''' | ||
+ | ===File1.c=== | ||
+ | <source lang=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) ); | ||
+ | } | ||
+ | </source> | ||
+ | ===File2.c=== | ||
+ | <source lang=c> | ||
+ | //Author: Henrik Thomsen <heth@mercantec.dk> | ||
+ | //Name: file2.c | ||
+ | #include <stdio.h> | ||
+ | void p2( void ) { | ||
+ | printf("I am file2\n"); | ||
+ | } | ||
+ | </source> | ||
+ | ===Creating libfilearchive.a=== | ||
+ | <source lang=bash> | ||
+ | [heth@localhost ]$ gcc -c file1.c | ||
+ | [heth@localhost ]$ gcc -c file2.c | ||
+ | [heth@localhost ]$ ar rc libfilearchive.a file1.o file2.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 1051950 Dec 23 10:32 libfilearchive.a | ||
+ | </source> | ||
+ | Notice the size of the object file from '''file1.c''' and the '''.a''' archivefile. It contains the 1MB const array. | ||
+ | |||
+ | </source> | ||
[[Category:Linux]] | [[Category:Linux]] |
Revision as of 10:34, 23 December 2018
Linux Libraries comes in two forms: Static and shared.
Contents
Static Libraries
Static libraries link needed code from the object (.o) files or an archive of object files into the binary file.
Static example
Pack two files file1.c and file2.c to libfilearchive.a
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");
}
Creating libfilearchive.a
[heth@localhost ]$ gcc -c file1.c
[heth@localhost ]$ gcc -c file2.c
[heth@localhost ]$ ar rc libfilearchive.a file1.o file2.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 1051950 Dec 23 10:32 libfilearchive.a
Notice the size of the object file from file1.c and the .a archivefile. It contains the 1MB const array.
</source>