c程序生成并使用共享库的操作方法

 更新时间:2024年09月19日 10:57:27   作者:标标大人  
在C语言开发中,共享库可以减少程序体量并实现功能共享,本文详细介绍了如何创建一个实现基本数学功能的共享库,并展示了其他程序如何利用这个库,步骤包括编写源代码、编译成目标文件、链接成共享库以及如何在其他程序中使用这个库

一、前言

在开发大型应用或者是集成第三方功能(比如集成算法)的时候,通常都是直接调用共享库中的接口的。使用共享库,不仅能够避免程序体量过大,还便于多个程序使用公共的功能。
本文将介绍c程序如何生成共享库以及其他程序如何使用该共享库。

二、如何生成共享库

我们来写一个实现加减乘功能的共享库。

2.1 编写源代码

math_func.c代码如下:

/*************************************************************************
 * auther: conbiao
 * time: 2024/09/10
 ************************************************************************/
/************************************************************************
*                               HEADER
************************************************************************/
#include <stdio.h>
#include <stdlib.h>
#include "math_func.h"
/************************************************************************
*Function Name: math_add()
*************************************************************************
* Summary:
*           caculate the sum of a and b
* Parameters:
*           a
*           b
* Return:
*           the sum of a & b
*
************************************************************************/
int math_add(int a, int b)
{
    return a + b;
}
/************************************************************************
*Function Name: math_sub()
*************************************************************************
* Summary:
*           caculate the sub of a and b
* Parameters:
*           a
*           b
* Return:
*           the sub of a & b
*
***********************************************************************/
int math_sub(int a, int b)
{
    return a - b;
}
/************************************************************************
*Function Name: math_multi()
*************************************************************************
* Summary:
*           caculate the product of a and b
* Parameters:
*           a
*           b
* Return:
*           the product of a & b
*
***********************************************************************/
int math_multi(int a, int b)
{
    return a * b;
}

头文件math_func.h:

/*************************************************************************
        > File Name: math_func.h
        > Author: conbiao
        > Created Time: 2024年09月10日 星期二 10时43分06秒
 ************************************************************************/
#ifndef MATH_FUNC_H
#define MATH_FUNC_H
/***********************************************************************
 *                            HEADER
 ***********************************************************************/
#include <stdio.h>
/***********************************************************************
 *                        FUNCTION DECLARATION
 ***********************************************************************/
int math_add(int a, int b);
int math_sub(int a, int b);
int math_multi(int a, int b);
#endif

2.2 将源文件编译成目标文件

使用gcc编译器将程序源码编译成目标文件,并添加-fPIC以生成与位置无关的代码,这是生成共享库所必须的,如下所示:

(2.2-1)

2.3 将目标文件链接成共享库

使用gcc将目标文件链接成共享库。共享库的命名通常遵循特定的约定,例如在Linux系统上,共享库通常以 lib 开头,并以 .so 结尾
如下图所示:

(2.3-1)
如此共享库就生成完成了。

三、使用共享库

在其他程序中如果要使用共享库,方法如下:

3.1 编写源码

-/*************************************************************************
        > File Name: lib_test.c
        > Author: conbiao
        > Created Time: 2024年09月10日 星期二 11时13分11秒
 ************************************************************************/
#include <stdio.h>
#include "math_func.h"
/*************************************************************************
 *                                MAIN
 ************************************************************************/
int main(int argc, char* argv[])
{
    int a = 10;
    int b = 5;
    printf("a + b = %d\n",math_add(a,b));
    printf("a - b = %d\n",math_sub(a,b));
    printf("a * b = %d\n",math_multi(a,b));
    return 0;
}

3.2 编译链接

编译并链接程序时,指定共享库的位置,如下所示:

(3.2-1)
运行结果如下:

(3.2-2)

到此这篇关于c程序生成并使用共享库的操作方法的文章就介绍到这了,更多相关c程序共享库内容请搜索脚本之家以前的文章或继续浏览下面的相关文章希望大家以后多多支持脚本之家!

相关文章

  • 浅析C++中的函数重载

    浅析C++中的函数重载

    这篇文章主要介绍了浅析C++中的函数重载,在C++中,可以为两个或两个以上的函数提供相同的函数名称,只要参数类型不同,或者参数类型相同而参数个数不同,又或者参数类型参数个数相同,参数次序不同,称为函数重载,需要的朋友可以参考下
    2023-08-08
  • C++中静态初始化数组与动态初始化数组详解

    C++中静态初始化数组与动态初始化数组详解

    今天小编就为大家分享一篇C++中静态初始化数组与动态初始化数组详解,具有很好的参考价值,希望对大家有所帮助。一起跟随小编过来看看吧
    2018-07-07
  • C语言实现分治法实例

    C语言实现分治法实例

    这篇文章主要为大家详细介绍了C语言实现分治法的实例,具有一定的参考价值,感兴趣的小伙伴们可以参考一下
    2018-08-08
  • C语言实现顺序表的顺序查找和折半查找

    C语言实现顺序表的顺序查找和折半查找

    这篇文章主要为大家详细介绍了C语言实现顺序表的顺序查找和折半查找,文中示例代码介绍的非常详细,具有一定的参考价值,感兴趣的小伙伴们可以参考一下
    2019-06-06
  • C语言详解如何实现顺序栈

    C语言详解如何实现顺序栈

    顺序栈,就是用一组地址连续的存储单元来存放栈元素,然后用一个栈结构去维护一个栈。在C中,可用动态开辟的数组去表示,维护的栈结构需要有一个栈底和一个栈顶指针
    2022-04-04
  • C语言中strlen() strcpy() strcat() strcmp()函数的实现方法

    C语言中strlen() strcpy() strcat() strcmp()函数的实现方法

    这篇文章主要介绍了C语言中strlen() strcpy() strcat() strcmp()函数的实现方法,需要的朋友可以参考下
    2017-08-08
  • C语言内存操作函数使用示例梳理讲解

    C语言内存操作函数使用示例梳理讲解

    这篇文章主要介绍了C语言库函数中的内存操作函数memcpy()、memmove()、memset()、memcmp()使用示例分析,文中通过示例代码介绍的非常详细,对大家的学习或者工作具有一定的参考学习价值,需要的朋友们下面随着小编来一起学习学习吧
    2022-09-09
  • Qt图形图像开发之曲线图模块QCustomplot库生成静态、动态曲线详细教程图解

    Qt图形图像开发之曲线图模块QCustomplot库生成静态、动态曲线详细教程图解

    这篇文章主要介绍了Qt图形图像开发之曲线图模块QCustomplot库画静态、动态曲线详细教程图解,需要的朋友可以参考下
    2020-03-03
  • C++实现反转链表的两种方法

    C++实现反转链表的两种方法

    本文主要介绍了C++实现反转链表的两种方法,文中通过示例代码介绍的非常详细,对大家的学习或者工作具有一定的参考学习价值,需要的朋友们下面随着小编来一起学习学习吧
    2023-02-02
  • 学习C和C++的9点经验总结

    学习C和C++的9点经验总结

    本文给大家总结了一下我们在学习C和C++的时候的一些经验和需要注意的事项,希望能给大家一些帮助,少走些弯路
    2015-12-12

最新评论