当前位置: 首页 > backend >正文

静态库和共享库(动态库)的编译链接

文章目录

  • 静态库
    • 代码
    • 文件
    • 过程
  • 动态库
    • 代码
    • 过程

静态库

代码

gcc -c test.c -o test.o              //生成目标文件
ar crs libtest.a test.o              //生成静态库
gcc main.c -L./ -ltest -o main_test  //链接静态库

文件

静态文件test.c

#include <stdio.h>void Hello(const char* arg)
{printf("Hello %s\n",arg);
}

源文件main.c

#include <stdio.h>extern void Hello(const char * arg);int main()
{Hello("world");return 0;
}

过程

step1:生成目标文件

gcc -c test.c -o test.o

step2:编译(生成)静态库

ar crs libtest.a test.o

ls

libtest.a main.c test.c test.o

step3:链接静态库

gcc main.c -L./ -ltest -o main_test

ls

main_test libtest.a main.c test.c test.o

运行

./main_test

动态库

代码

1.创建动态库

gcc -fPIC -Wall -c test.c			   //编译为位置无关代码(PIC)
gcc -shared -o libtest.so test.o    //创建共享库

2.编译链接主程序

# 方法1 指定路径
gcc main.c -o app -L./ -lmytest    //生成可执行文件app,但找不到动态库
# 方法2 通过环境变量
pwd
export LIBRARY_PATH=$LIBRARY_PATH:(动态库所在的路径)    //相当于-L的作用

3.设置系统寻找动态库的路径

# 方法1:指定路径
cp libtest.so /usr/lib/            //系统会从这里找
./app# 方法2:环境变量
pwd                                //复制共享库的路径
sudo vim /etc/ld.so.conf    	   //通过在/etc/ld.so.conf文件中添加共享库的路径来实现
sudo ldconfig
./app

过程

ls

main.c test.c

step1:生成目标文件

gcc -fPIC -Wall -c test.c -o test.o

ls

main.c test.c test.o

step2:创建共享库

gcc -shared -o libtest.so test.o

ls

libtest.so main.c test.c test.o

step3:链接到可执行文件

gcc main.c -o app -L./ -lmytest

ls

app libtest.so main.c test.c test.o

step4:设置路径

把共享库libtest.so复制到/usr/lib/下 
或 
在/etc/ld.so.conf文件中添加libtest.so所在的路径(pwd)
http://www.xdnf.cn/news/14195.html

相关文章:

  • Abaqus控制网格的方法
  • 测试开发-正交法
  • CRASIM输入输出变量中英文对照
  • 如何打造沉浸式文件操作体验
  • linux用反汇编分析访问空指针问题
  • Springboot短视频推荐系统b9wc1(程序+源码+数据库+调试部署+开发环境)带论文文档1万字以上,文末可获取,系统界面在最后面。
  • legged_control足式机器人控制框架及代码解析(三):legged_interface NMPC接口
  • ReentrantLock的lockInterruptibly有什么用
  • 【二叉树】(四)二叉搜索树的基础修改构造及属性求解1
  • Java 小工具 - 节假日判断(包含周末),并提供离线版和在线版
  • 《单光子成像》第三章 预习2025.6.13
  • java集合篇(五) ---- List接口
  • 【技术追踪】用于 CBCT 到 CT 合成的纹理保持扩散模型(MIA-2025)
  • 3GPP协议PDF下载
  • Wireshark安装
  • shader实现发亮的粒子 + 透明度渲染可能出现的坑
  • Python学习(9) ----- Python的Flask
  • 课程笔记gitHub案例数据请求与展示
  • AIGC 基础篇 Python基础 06 函数基础
  • 嵌入式linux GDB使用教程
  • App渠道效果怎么统计和对比,有哪些实用方法和工具?
  • ROS的tf_tree中的节点含义详解
  • QGraphicsView
  • 【GESP真题解析】第 6 集 GESP 四级 2023 年 9 月编程题 1:进制转换
  • 【wvp-pro-gb28181】新建CallIdHeader失败的原因解析记录
  • 自动化KVM虚拟机创建脚本详解:从模板到高效部署的线上实践!
  • 【笔记】在新版本 Windows 系统安装回 Windows Subsystem for Android(WSA)
  • 「从实验室到工程现场:机器学习赋能智能水泥基复合材料研发全流程解析」
  • 表达式的自动类型转换
  • [Latex排版] 解决Something‘s wrong--perhaps a missing \item. 问题