c linux 静态库试验

时间:2024-06-14 07:09:56

1.概要

2.代码

2.1 main.c

#include <stdio.h>
#include "add.h"

int main(){
    printf("hello word\n");
    int a = fun(3,5);
    printf("%d\n",a);
    return 0;
}

2.2 add.c

#include "add.h"

int fun(int a,int b){
    return a+b;
}

2.3 add.h

#ifndef LIB_ADD_H  
#define LIB_ADD_H 

int fun(int a,int b);

#endif // LIB_ADD_H

3.运行结果

3.1 

 xjc@US-PF20F37R:~/objects/tests/t13$ gcc main.c -o main
xjc@US-PF20F37R:~/objects/tests/t13$ ./main
hello word
xjc@US-PF20F37R:~/objects/tests/t13$ gcc -c add.c -o add.o
xjc@US-PF20F37R:~/objects/tests/t13$ ls
add.c  add.h  add.o  main  main.c
xjc@US-PF20F37R:~/objects/tests/t13$ ar rcs lib1.a add.o
xjc@US-PF20F37R:~/objects/tests/t13$ ls
add.c  add.h  add.o  lib1.a  main  main.c

3.2

xjc@US-PF20F37R:~/objects/tests/t13$ gcc main.c -L. -l1 -o main
xjc@US-PF20F37R:~/objects/tests/t13$ ./main
hello word
8
xjc@US-PF20F37R:~/objects/tests/t13$ 

4.附加

4.1 c 静态链接库试验

 在C语言中,静态链接库(static library)是一种包含多个目标文件(object files)的归档文件,这些目标文件是编译器编译源代码后产生的。静态链接库在编译时会被完全嵌入到最终的可执行文件中,因此最终的可执行文件不依赖于外部库文件。

下面是一个简单的步骤,演示如何创建一个C静态链接库,并使用它:

1. 编写源代码

首先,我们需要编写一些源代码。假设我们有两个源文件:lib_add.c 和 lib_sub.c,它们分别实现了加法和减法功能。

lib_add.c:

#include "lib_add.h"
int add(int a, int b) {
return a + b;
}

lib_add.h:

#ifndef LIB_ADD_H
#define LIB_ADD_H
int add(int a, int b);
#endif // LIB_ADD_H

lib_sub.c:

#include "lib_sub.h"
int sub(int a, int b) {
return a - b;
}

lib_sub.h:

#ifndef LIB_SUB_H
#define LIB_SUB_H
int sub(int a, int b);
#endif // LIB_SUB_H

2. 编译为目标文件

使用gcc编译器将源代码编译为目标文件:

gcc -c lib_add.c -o lib_add.o
gcc -c lib_sub.c -o lib_sub.o

这将会生成两个目标文件:lib_add.o 和 lib_sub.o

3. 创建静态链接库

使用ar命令将目标文件归档为静态链接库:

ar rcs libmath.a lib_add.o lib_sub.o

这将会生成一个名为libmath.a的静态链接库。

4. 编写主程序

现在我们可以编写一个主程序来使用这个静态链接库:

main.c:

#include <stdio.h>
#include "lib_add.h"
#include "lib_sub.h"
int main() {
int a = 5, b = 3;
printf("Addition: %d\n", add(a, b));
printf("Subtraction: %d\n", sub(a, b));
return 0;
}

5. 链接静态库并编译主程序

使用gcc编译器链接静态库并编译主程序:

gcc main.c -L. -lmath -o main

注意-L.告诉gcc在当前目录下搜索库文件,-lmath告诉gcc链接名为math的库(即libmath.a)。

6. 运行程序

现在我们可以运行程序了:

./main

如果一切正常,你应该会看到如下输出:

Addition: 8
Subtraction: 2

这表示你的静态链接库已经成功创建,并且你的主程序已经成功链接并使用了它。