uc之 静态库 动态库

2024-06-18 19:18
文章标签 动态 静态 uc

本文主要是介绍uc之 静态库 动态库,希望对大家解决编程问题提供一定的参考价值,需要的开发者们随着小编来一起学习吧!

gcc编译器(代码的 预处理/汇编/编译/连接)

C程序员一般写程序会定义 .c和.h两种文件
.c文件(源文件)中一般放代码的实现,.h文件(头文件)中放 各种声明和定义。
gcc -E __.c 只做预处理,可以生成.i文件
gcc -c __.c 只编译不连接,生成.o文件
gcc -S __.c 生成汇编,生成 .s文件
gcc __.c 预处理、编译和连接
gcc -o 指定目标文件名
gcc -E __.c -oxx.i 生成.i文件
gcc -Wall 可以显示更多的警告信息

C语言#include 查找头文件的途径:
1 ""会查找 当前目录(<>不查找)
2 gcc -I 指定的目录
3 系统目录(/usr/include等)
4 用环境变量
(CPATH/C_INCLUDE_PATH)配置的目录
#pragma 可以额外新增一些功能,
#pragma GCC dependency 文件名
比较更新时间,如果 文件名比当前文件新,产生警告
#pragma GCC poison 名字
这个名字将被禁用,否则 产生 错误
#pragma pack(正整数)
可以设置 结构体的对齐和补齐的单位

程序员可以把自己的代码打包成库文件,再提供一个头文件即可。
库文件包括静态库和共享库(动态库),静态库的使用方式 是代码的复制,共享库的使用方式 是函数指针(函数地址)。
静态库优点是 代码独立,效率稍好,缺点是 代码的空间太大,不利于修改和维护。
共享库优点是 代码空间较小,修改、维护比较方便,缺点是 代码依赖于共享库文件。
共享库的使用更加广泛。共享库 以.so结尾,静态库 以 .a结尾。
1 静态库的使用步骤
1.1 生成 静态库文件(.a)
a 写源代码
b 编译生成目标文件(.o)
c 使用ar -r 命令生成静态库文件
ar -r lib__.a __.o
1.2 调用静态库文件
前提:需要lib__.a和__.h文件
a 写调用源代码(test.c)
b 编译 (gcc -c)
c 连接静态库文件,有三种方法:
1) gcc __.o lib__.a (直接连接)
2) 配置环境变量 LIBRARY_PATH,把库文件所在路径配进去,然后用 gcc __.o -l__(库文件名)
3) gcc __.o -l__ -L库文件路径

2 共享库的使用步骤
2.1 生成 共享库文件(.so)
a 写源代码
b 编译生成目标文件(.o)
gcc -c -fpic __.c (-fpic可以不加)
c 生成共享库文件
gcc -shared __.o -o lib__.so
2.2 调用 共享库文件
和静态库一样
注:想运行共享库程序,必须配置LD_LIBRARY_PATH.

这篇关于uc之 静态库 动态库的文章就介绍到这儿,希望我们推荐的文章对编程师们有所帮助!



http://www.chinasem.cn/article/1072870

相关文章

Spring Gateway动态路由实现方案

《SpringGateway动态路由实现方案》本文主要介绍了SpringGateway动态路由实现方案,文中通过示例代码介绍的非常详细,对大家的学习或者工作具有一定的参考学习价值,需要的朋友们下面随... 目录前沿何为路由RouteDefinitionRouteLocator工作流程动态路由实现尾巴前沿S

Python动态处理文件编码的完整指南

《Python动态处理文件编码的完整指南》在Python文件处理的高级应用中,我们经常会遇到需要动态处理文件编码的场景,本文将深入探讨Python中动态处理文件编码的技术,有需要的小伙伴可以了解下... 目录引言一、理解python的文件编码体系1.1 Python的IO层次结构1.2 编码问题的常见场景二

SpringBoot中@Value注入静态变量方式

《SpringBoot中@Value注入静态变量方式》SpringBoot中静态变量无法直接用@Value注入,需通过setter方法,@Value(${})从属性文件获取值,@Value(#{})用... 目录项目场景解决方案注解说明1、@Value("${}")使用示例2、@Value("#{}"php

Java使用Javassist动态生成HelloWorld类

《Java使用Javassist动态生成HelloWorld类》Javassist是一个非常强大的字节码操作和定义库,它允许开发者在运行时创建新的类或者修改现有的类,本文将简单介绍如何使用Javass... 目录1. Javassist简介2. 环境准备3. 动态生成HelloWorld类3.1 创建CtC

通过配置nginx访问服务器静态资源的过程

《通过配置nginx访问服务器静态资源的过程》文章介绍了图片存储路径设置、Nginx服务器配置及通过http://192.168.206.170:8007/a.png访问图片的方法,涵盖图片管理与服务... 目录1.图片存储路径2.nginx配置3.访问图片方式总结1.图片存储路径2.nginx配置

go动态限制并发数量的实现示例

《go动态限制并发数量的实现示例》本文主要介绍了Go并发控制方法,通过带缓冲通道和第三方库实现并发数量限制,文中通过示例代码介绍的非常详细,对大家的学习或者工作具有一定的参考学习价值,需要的朋友们下面... 目录带有缓冲大小的通道使用第三方库其他控制并发的方法因为go从语言层面支持并发,所以面试百分百会问到

一文详解SpringBoot中控制器的动态注册与卸载

《一文详解SpringBoot中控制器的动态注册与卸载》在项目开发中,通过动态注册和卸载控制器功能,可以根据业务场景和项目需要实现功能的动态增加、删除,提高系统的灵活性和可扩展性,下面我们就来看看Sp... 目录项目结构1. 创建 Spring Boot 启动类2. 创建一个测试控制器3. 创建动态控制器注

springboot如何通过http动态操作xxl-job任务

《springboot如何通过http动态操作xxl-job任务》:本文主要介绍springboot如何通过http动态操作xxl-job任务的问题,具有很好的参考价值,希望对大家有所帮助,如有错... 目录springboot通过http动态操作xxl-job任务一、maven依赖二、配置文件三、xxl-

Java调用C#动态库的三种方法详解

《Java调用C#动态库的三种方法详解》在这个多语言编程的时代,Java和C#就像两位才华横溢的舞者,各自在不同的舞台上展现着独特的魅力,然而,当它们携手合作时,又会碰撞出怎样绚丽的火花呢?今天,我们... 目录方法1:C++/CLI搭建桥梁——Java ↔ C# 的“翻译官”步骤1:创建C#类库(.NET

MyBatis编写嵌套子查询的动态SQL实践详解

《MyBatis编写嵌套子查询的动态SQL实践详解》在Java生态中,MyBatis作为一款优秀的ORM框架,广泛应用于数据库操作,本文将深入探讨如何在MyBatis中编写嵌套子查询的动态SQL,并结... 目录一、Myhttp://www.chinasem.cnBATis动态SQL的核心优势1. 灵活性与可