C语言中进行跨库链接主要依靠静态链接和动态链接两种方式,下面我将详细讲解这两种方法的步骤及其示例。
静态链接
步骤
-
编写需要连接的源代码文件,在编译源文件时应该增加编译选项
-c
(只编译不链接,生成目标文件.o)。例如:c
//add.c
int add(int a, int b){
return a+b;
}shell
gcc -c add.c -o add.o -
将目标文件打包成静态库
.a
文件。例如:shell
ar rcs libadd.a add.o -
以静态库的方式链接目标文件。例如:
“`c
//main.cinclude
int add(int a, int b);
int main(){
printf(“sum=%d\n”, add(1,2));
return 0;
}
“`shell
gcc main.c -L. -ladd -o main
示例
示例1:比较两个数的大小
文件 larger.c
#include <stdio.h>
int larger(int a, int b){
return a>b?a:b;
}
文件 smaller.c
#include <stdio.h>
int smaller(int a, int b){
return a<b?a:b;
}
文件 main.c
#include <stdio.h>
#include "larger.h"
#include "smaller.h"
int main(){
int a=1, b=2;
printf("larger(%d, %d)=%d\n", a, b, larger(a, b));
printf("smaller(%d, %d)=%d\n", a, b, smaller(a, b));
return 0;
}
命令行:
gcc -c larger.c -o larger.o
gcc -c smaller.c -o smaller.o
ar rcs liboperate.a larger.o smaller.o
gcc -c main.c -o main.o
gcc -o main main.o -L. -loperate
执行结果:
larger(1, 2)=2
smaller(1, 2)=1
动态链接
步骤
-
编译需要连接的源代码并生成共享库文件(
.so
或.dll
文件)。shell
gcc -shared add.c -o libadd.so -
在需要调用共享库的代码中,加入头文件并链接共享库。
“`c
include
include
include “add.h”
int main(){
printf(“sum=%d\n”, add(1,2));
return 0;
}
“`shell
gcc main.c -L. -ladd -o main
示例
示例2:计算器
文件 add.c
#include <stdio.h>
int add(int a, int b){
return a+b;
}
文件 sub.c
#include <stdio.h>
int sub(int a, int b){
return a-b;
}
文件 calculator.h
#ifndef __CALCULATOR_H__
#define __CALCULATOR_H__
int add(int a, int b);
int sub(int a, int b);
#endif
文件 main.c
#include <stdio.h>
#include <stdlib.h>
#include "calculator.h"
int main(){
int a=1, b=2;
printf("%d+%d=%d\n", a, b, add(a,b));
printf("%d-%d=%d\n", a, b, sub(a,b));
return 0;
}
命令行:
gcc -shared add.c sub.c -o libcalculator.so
gcc -c main.c -o main.o
gcc main.o -o main -L./ -lcalculator
执行结果:
1+2=3
1-2=-1
以上就是跨库链接的详细攻略及其两个示例,希望对你有所帮助。