The concept of a static library:
We know that program compilation requires preprocessing, compiling, assembling, and linking several steps. In our application, there are some common code that needs to be reused, compile the code into a "library" file, and in the link step, the connector will get the required code from the library file and copy it to the resulting executable . This library, known as a static library, is characterized by a full copy of the library code contained in the executable file, and the drawback is that multiple copies are redundant when used multiple times.
Create a static library:
For example, I have some of the following functions that manipulate arrays need to be made into a static library, convenient for use without the need for duplicate definitions, the Array.h header file is as follows:
1 #ifndef Array_h_2 #defineArray_h_3 4 /*5 function function: Finding array elements by binary lookup of shaped array6 parameter: ary array name start find where end find ends7 return Value: Successfully returns the subscript of the array, failure returns-18 */9 intBin_search (int*ary,intStartintEnd,intkey);Ten One /* A functions: Quick sorting of shaped arrays - parameter: ary array name low need to sort the high order - return value: None the */ - voidSort_quick (int* ary,intLowintHigh ); - - /* + function function: Outputs all elements of a shaped array - parameter: ary array name len array length + return value: None A */ at voidPrint_array (int* ary,intlen); - - #endif
View Code
Array.c source files are as follows:
1#include"Array.h"2#include <stdio.h>3 4 /*5 function function: Finding array elements by binary lookup of shaped array6 parameter: ary array name start find where end find ends7 return Value: Successfully returns the subscript of the array, failure returns-18 */9 intBin_search (int*ary,intStartintEnd,intkey)Ten { One intMid = (start + end)/2; A if(Start >end) { - return-1; - } the if(Ary[mid] = =key) { - returnmid; -}Else if(Key >Ary[mid]) { - returnBin_search (ary, Mid +1, end, key); +}Else{ - returnBin_search (ary, start, mid-1, key); + } A } at - /* - function function: Outputs all elements of a shaped array - parameter: ary array name len array length - return value: None - */ in voidPrint_array (int* ary,intlen) - { to inti =0; + for(i =0; i < Len; i + +){ -printf"%d", Ary[i]); the } *printf"\ n"); $ }Panax Notoginseng - /* the functions: Quick sorting of shaped arrays + parameter: ary array name low need to sort the high order A return value: None the */ + voidSort_quick (int* ary,intLowintHigh ) - { $ if(Low >High ) $ return ; - inti =Low ; - intj =High ; the intKey =Ary[i]; - Wuyi while(I <j) { the while(I < J && Ary[j] >=key) { -j--; Wu } -Ary[i] =Ary[j]; About $ while(I < J && Ary[i] <=key) { -i++; - } - AARY[J] =Ary[i]; + } the -Ary[i] =key; $Sort_quick (ary, Low, I-1); theSort_quick (ary, i +1, high); the}
View Code
I used the engineering directory structure here
Include: Save header file
SRC: Save source file
Obj: Save. o File
LIB: Save library file
Bin: Save executable file
1: Compile our. c file into an. o file
Gcc-c Src/array.c-o obj/array.o-i include
2: Use AR command to generate library file
AR RCS lib/libary.a obj/array.o
3: Testing the use of static libraries
See if a static library file called Libary.a is generated under the Lib directory
Let's simply test if it is available, write the main function, as follows:
1#include <stdio.h>2#include"Array.h"3 4 intMainintargcChar**argv)5 {6 intary[Ten] = {9,8,6,0,2,5,1,7, at, the};7 8Sort_quick (ary,0,9);9Print_array (ary,Ten);Ten return 0; One}
View Code
Compile run Effect:
-L Specify the library file path
-L Specify Library name
4: Adding a static library to the system path
[Email protected]:~/c/algorithm$ sudo cp lib/libary.a/usr/lib/[email protected]:~/c/algorithm$ sudo cp include/array.h /usr/include/
Final Test Result:
1#include <stdio.h>2#include <array.h>3 4 intMainintargcChar**argv)5 {6 intary[Ten] = {9,8,6,0,2,5,1,7, at, the};7 8Sort_quick (ary,0,9);9Print_array (ary,Ten);Ten return 0; One}
View Code
Creation and use of static libraries on Linux