C语言 Windows下使用gcc制作静态库与动态库

前言

将函数封装成库不仅有利于代码的复用, 还可以在不公开源码的情况下给他人使用函数的功能。本文记录了Windows下使用gcc制作静态库与动态库的过程。

一、测试代码编写

测试函数为一个加法函数,它将被制作成静态库与动态库,并被函数main()调用。各个文件如下所示,它们被放在同一个目录下。

  • add.h

    int add(int a, int b);
    
  • add.c

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

    #include <stdio.h>
    #include "add.h"
    
    int main()
    {
        int a = 10;
        int b = 20;
        int c;
        c = add(a, b);
        printf("c = %d\n", c);
        return 0;
    }
    

二、 静态库的制作与使用

  1. 打开cmd, 使用gcc编译add.c,生成add.o

    gcc -c add.c
    
  2. 使用ar命令生成静态库libadd.a

    ar -cr libadd.a add.o
    
  3. 使用gcc编译main.c,生成可执行文件

    gcc main.c libadd.a -o test.exe
        or
    gcc main.c -ladd -L./ -o test.exe
    

    完成静态库的制作后,只需库文件libadd.a、头文件add.h与调用程序main.c参与编译,不再需要源文件add.c

    注意:在命令gcc main.c -ladd -L./ -o test.exe中,-l代表使用的库,由于编译器会按照lib<库名>.a的规则进行搜索,因此这里只需要给出add即可,-L用来指定附加库文件的搜索路径,此处.\代表当前目录。

  4. 执行test.exe测试

    test.exe
    

    上述命令的执行过程如下图所示:

三、动态库的制作与使用

  1. 打开cmd,执行以下命令,生成动态库libadd.so

    gcc -shared -fpic add.c -o libadd.so
    
  2. 使用gcc 编译main.c

    gcc main.c libadd.so -o test.exe
    
  3. 执行test.exe测试

    test
    

    上述命令的执行过程如下图所示:
    在这里插入图片描述

注意:由于动态库在程序执行时才被加载,所以如果将动态库libadd.so删除的话,那test.exe就无法执行了。

至此,静态库、动态库的制作与使用就完成了,欢迎大家交流指正~

  • 9
    点赞
  • 31
    收藏
    觉得还不错? 一键收藏
  • 3
    评论
使用C语言编写加减乘除的函数,并将它们打包成静态库动态库,以供其他程序使用。 首先,你需要编写包含加减乘除函数的源代码文件。例如,你可以创建一个名为"math_operations.c"的文件,并在其中实现以下函数: ```c int add(int a, int b) { return a + b; } int subtract(int a, int b) { return a - b; } int multiply(int a, int b) { return a * b; } int divide(int a, int b) { if (b == 0) { printf("Error: Division by zero\n"); return 0; } return a / b; } ``` 接下来,你可以使用编译器将这些函数编译静态库动态库。 要创建静态库,你可以使用以下命令: ``` gcc -c math_operations.c -o math_operations.o ar rcs libmath_operations.a math_operations.o ``` 这将生成一个名为"libmath_operations.a"的静态库文件。 要创建动态库,你可以使用以下命令: ``` gcc -shared -o libmath_operations.so math_operations.c ``` 这将生成一个名为"libmath_operations.so"的动态库文件。 无论你选择创建静态库还是动态库,你都可以在其他程序中使用这些函数。只需在程序中包含头文件,并链接相应的库文件即可。例如,假设你有一个名为"main.c"的文件,你可以这样使用这些函数: ```c #include <stdio.h> #include "math_operations.h" // 包含头文件 int main() { int a = 10; int b = 5; printf("Addition: %d\n", add(a, b)); printf("Subtraction: %d\n", subtract(a, b)); printf("Multiplication: %d\n", multiply(a, b)); printf("Division: %d\n", divide(a, b)); return 0; } ``` 编译并链接这个程序时,确保将库文件与之相关联。例如,如果你使用静态库,可以这样编译: ``` gcc main.c -o main -L. -lmath_operations ``` 如果你使用动态库,可以这样编译: ``` gcc main.c -o main -L. -lmath_operations ``` 完成编译后,你就可以运行该程序了,它将使用你创建的静态库动态库中的函数进行加减乘除运算。
评论 3
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值