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 |
这表示你的静态链接库已经成功创建,并且你的主程序已经成功链接并使用了它。