C语言中如何进行跨库链接?

  • Post category:C

C语言中进行跨库链接主要依靠静态链接和动态链接两种方式,下面我将详细讲解这两种方法的步骤及其示例。

静态链接

步骤

  1. 编写需要连接的源代码文件,在编译源文件时应该增加编译选项 -c(只编译不链接,生成目标文件.o)。例如:

    c
    //add.c
    int add(int a, int b){
    return a+b;
    }

    shell
    gcc -c add.c -o add.o

  2. 将目标文件打包成静态库 .a 文件。例如:

    shell
    ar rcs libadd.a add.o

  3. 以静态库的方式链接目标文件。例如:

    “`c
    //main.c

    include

    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

动态链接

步骤

  1. 编译需要连接的源代码并生成共享库文件(.so.dll 文件)。

    shell
    gcc -shared add.c -o libadd.so

  2. 在需要调用共享库的代码中,加入头文件并链接共享库。

    “`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

以上就是跨库链接的详细攻略及其两个示例,希望对你有所帮助。