码农知识堂 - 1000bd
  •   Python
  •   PHP
  •   JS/TS
  •   JAVA
  •   C/C++
  •   C#
  •   GO
  •   Kotlin
  •   Swift
  • Linux学习笔记(10)----静态库与共享库


    目录

    静态库的创建

    一、编译一个库源码tsys.c

    二、编译生成目标文件

    三、通过工具

    四、编辑代码调用test1.c

    五、编译

    六、运行

    共享库的创建

    一、编辑两个c文件,拿来调用

    二、编译生成两个目标文件

    三、生成一个共享库

    四、编辑一个主函数c文件testlib.c

    五、编译主函数c文件

    六、未识别+如何找到共享库

    七、运行


    静态库的创建


    一、编译一个库源码tsys.c


    #include<stdio.h>
    #include<math.h>
    int gg(int a,int b)
    {
    return sqrt(a*a+b*b);
       
    }

    二、编译生成目标文件


    gcc -c tsys.c -Wall 

    三、通过工具


    ar crs libtsys.a tsys.o 

    四、编辑代码调用test1.c


    #include<stdio.h>
    int gg(int,int);
    int main()
    {
    printf("%d\n",gg(3,4));
    return 0;
    }

    五、编译


    调用库tsys和math
    gcc test1.c -o test1 -L. -ltsys -lm

    六、运行


    ./test1

    共享库的创建


    一、编辑两个c文件,拿来调用


    (1)
    #include <stdio.h>
    void hello(void)
    {

    printf("hello world!\n");
    return;
    }
    (2)
    #include <stdio.h>
    void bye(void)
    {

    printf("see you again\n");
    return;
    }

    二、编译生成两个目标文件


    gcc -c -fPIC hello.c bye.c -Wall

    三、生成一个共享库


    gcc -shared -o libtest.so hello.o bye.o
    (库名:test)

    四、编辑一个主函数c文件testlib.c


    #include<stdio.h>
    void hello(void);
    void bye(void);
    int main()
    {
    hello();
    bye();
    return 0;
    }

    五、编译主函数c文件


    gcc testlib.c -o testlib

    六、未识别+如何找到共享库


    (1)把库拷贝到/usr/lib和/lib下,但不建议使用
    (2)添加环境变量LD_RARY_PATH,添加库的路径
    (3)添加/etc/ld.so.comf.d/*.conf文件,执行ldconfig刷新
    实例:
    (2)添加环境变量举例

    1、export LD_LIBRARY_PATH(添加环境变量)
    2、export LD_LIBRARY_PATH=$LD_LIBRARY_PATH:/home/linux/lib1(lib1为存放库*.so的目录)(赋予变量路径)
    3、gcc testlib.c -o testlib -L /home/linux/lib1 -ltest(进行编译主函数c文件,调用设定路径下的名为test库)
    4、注意使用添加环境变量方法时,若重新打开一个终端,就要对环境变量再次赋予路径
    5、该方法并不方便
    (3)第三种方法
    1、到/etc/ld.so.comf.d/中新建一个.conf文件,如my.conf
    2、编辑my.conf文件,写入/home/linux/lib1
    3、刷新,运行 sudo ldconfig
    4、完成,随时都可以运行./testlib 不用多次编辑环境变量
    5、比较方便

    七、运行


    ./testlib

  • 相关阅读:
    知识点滴 - Email地址不区分大小写
    企业架构LNMP学习笔记49
    亲测flutter打包apk后大小,比较满意
    SQL 教程之 10 个 SQL 操作用于 80% 的数据操作
    Android 7 btsnoop代码介绍
    TPM零知识学习五 —— tpm2-abrmd源码安装
    【MySql】4- 实践篇(二)
    Mistral 7B 比Llama 2更好的开源大模型 (四)
    C++PrimerPlus(第6版)中文版:Chapter16.2智能指针模版类smrtptrs.cpp
    roofs 根文件系统制作
  • 原文地址:https://blog.csdn.net/weixin_45930808/article/details/124934430
  • 最新文章
  • 攻防演习之三天拿下官网站群
    数据安全治理学习——前期安全规划和安全管理体系建设
    企业安全 | 企业内一次钓鱼演练准备过程
    内网渗透测试 | Kerberos协议及其部分攻击手法
    0day的产生 | 不懂代码的"代码审计"
    安装scrcpy-client模块av模块异常,环境问题解决方案
    leetcode hot100【LeetCode 279. 完全平方数】java实现
    OpenWrt下安装Mosquitto
    AnatoMask论文汇总
    【AI日记】24.11.01 LangChain、openai api和github copilot
  • 热门文章
  • 十款代码表白小特效 一个比一个浪漫 赶紧收藏起来吧!!!
    奉劝各位学弟学妹们,该打造你的技术影响力了!
    五年了,我在 CSDN 的两个一百万。
    Java俄罗斯方块,老程序员花了一个周末,连接中学年代!
    面试官都震惊,你这网络基础可以啊!
    你真的会用百度吗?我不信 — 那些不为人知的搜索引擎语法
    心情不好的时候,用 Python 画棵樱花树送给自己吧
    通宵一晚做出来的一款类似CS的第一人称射击游戏Demo!原来做游戏也不是很难,连憨憨学妹都学会了!
    13 万字 C 语言从入门到精通保姆级教程2021 年版
    10行代码集2000张美女图,Python爬虫120例,再上征途
Copyright © 2022 侵权请联系2656653265@qq.com    京ICP备2022015340号-1
正则表达式工具 cron表达式工具 密码生成工具

京公网安备 11010502049817号