首页
学习
活动
专区
工具
TVP
发布
精选内容/技术社群/优惠产品,尽在小程序
立即前往

C语言---静态VS动态

C语言中,函数文件分为两种类型,一种是静态程序是直接注入目标程序的,不分彼此,文件通常以.a结尾),另一种是动态程序是在运行目标程序时(中)加载的,文件通常以.so结尾),下面我们就探索一下这两种文件的特点和使用方式吧...无论静态,还是动态,都是由.o文件创建的。因此,我们必须将源程序hello.c通过gcc先编译成.o文件。...创建文件冗余信息 -c 创建静态文件 编译静态 在编译成静态之前,我们需要将源文件编译一下,生成一个 .o 文件的目标文件。...比如我们生成的静态文件是libhello.a 需要编译的文件是main.c。编译命令如下: gcc main.c -L ....编译动态 还拿hello.c来说,使用下面的命令就可以生成一个动态文件libhello.so 。看一下各个参数的含义。

9K45
  • 您找到你想要的搜索结果了吗?
    是的
    没有找到

    C语言C语言标准大梳理(超全)

    C语言C语言标准大梳理(超全)) 博主介绍 前言 显示8进制和16进制 字符串I/O 定义字符串 字符串函数 前言 C89 标准总共划分为 15 个部分,每个部分用一个头文件描述,C99 标准新增了...9 个(为了简化学习,这里暂不提 C11 标准),总共有 24 个头文件。...同样的还有 %c 打印字符, %e, %Le 打印浮点值。还有一些特别的,例如 %zd 强制转换为整型打印。...可移植类型 C语言中有很多数据类型,但是在不同的设备和系统中每个数据类型所占的内存可能不同,C99新增了两个头文件 stdint 和 inttypes.h 来确保在各个系统中的功能相同。...me32); return 0; } 参数 PRID32 被定义在inttypes.h中,用于替代d , 这条语句等价于printf("me32 = %" "d" "\n", me32);, 这里可以看出C语言另一个特点

    2.7K20

    c语言实现大数运算_c语言标准教程

    前言 : 通过前面的3篇文章我们已经实现了大数的四则运算,本篇博客我们会把这是几个个方法做成一个文件,可以供自己日后使用。细心的读者可能意到了,每个程序都引用了big.h但是都被注释掉了。...文件命名: 头文件: big.h 源码在本篇 大数加法:big_add.c 完整源码在加法篇 大数减法:big_sub.c 完整源码在减法篇 大数乘法:big_mul.c 完整源码在乘除法篇...大数除法:big_div.c 完整源码在乘除法篇 测试文件:main.c 源码在本篇 实现: 1.将每个源码文件中的main函数去掉,将big.h注释取消。...big_sub.c big_mul.c big_div.h ..../a.out C语言大数运算,参考了很多人的博客和代码,学到了很多,在这里表示感谢。这次对大数运算的小小总结也是希望可以帮到有需求的人,哪怕一点点。

    2.9K10

    C语言常用标准解读

    有很多工程师喜欢自己封装一些标准已有的函数,其实自己封装的函数,并不一定比标准好,有时候反而代码更冗余,且有bug。下面就来分享一下C语言常见的一些标准。... 一、标准定义()  文件里包含了标准的一些常用定义...五、字符处理函数() 见下表: int isalpha(c) c是字母字符 int isdigit(c) c是数字字符 int isalnum(c) c是字母或数字字符 int isspace...(c) c是空格、制表符、换行符 int isupper(c) c是大写字母 int islower(c) c是小写字母 int iscntrl(c) c是控制字符 int isprint(c) c是可打印字符...,包括空格 int isgraph(c) c是可打印字符,不包括空格 int isxdigit(c) c是十六进制数字字符 int ispunct(c) c是标点符号 int tolower(int c

    1.3K2019

    C语言的几个标准

    C 标准 - ? 简介 C 标准的 assert.h头文件提供了一个名为 assert 的宏,它可用于验证程序做出的假设,并在假设为假时输出诊断消息。...中定义的唯一的函数: 序号 函数 & 描述 1 void assert(int expression)这实际上是一个宏,不是一个函数,可用于在 C 程序中添加诊断。...C 标准 - 简介 stdio是standard input & output (标准输入和输出)的缩写。文件后缀中“h”是header的缩写。...变量 下面是头文件 stdio.h 中定义的变量类型: 序号 变量 & 描述 1 size_t这是无符号整数类型,它是 sizeof 关键字的结果。...宏 下面是头文件 stdio.h 中定义的宏: 序号 宏 & 描述 1 NULL这个宏是一个空指针常量的值。

    3.7K10

    C语言线程的使用

    创建线程 下面是创建线程的示例代码,在创建过程中一定要保证编写的线程函数与规定的函数指针类型一致:void *(*start_routine) (void *): // pthread_create.c...// 休息, 休息一会儿... // sleep(1); return 0; } 编译测试程序,会看到如下错误信息: $ gcc pthread_create.c...' collect2: error: ld returned 1 exit status 错误原因是因为编译器链接不到线程文件(动态),需要在编译的时候通过参数指定出来,动态名为 libpthread.so...正确的编译命令为: # pthread_create 函数的定义在某一个中, 编译的时候需要加名 pthread $ gcc pthread_create.c -lpthread $ ....\n"); return 0; } 编译并执行测试程序: # 编译代码 $ gcc pthread_join.c -lpthread # 执行程序 $ .

    3.4K30

    C 语言使用标准开发

    ST公司为了让用户更快上手开发,产生用户粘性,将外设寄存器提前定义好,准备一些常用接口函数供用户使用,这就是标准的雏形。 下面来感受下使用标准的简便性。...本章涉及的代码位于100ASK_STM32F103开发板资料的“5_程序源码\0_单片机开发模式的发展\2_C语 言使用标准开发\”。...首先使用C语言需要设置栈,这些初始化操作标准已经帮忙完成了,我们只需要编写主函数即可,如代码段 6.4.1 所示。...代码段 6.4.1 C 语言使用标准开发(main.c) #include "main.h" #include "stm32f10x.h" #include "driver_led.h" void delay...将GPIO属性封装为结构体,通过设置结构体成员的属性,完成对GPIO的设置; 以上代码就实现了对开发板三色灯的红色灯交替闪烁效果,读者可以打开配套资料的“5_程序源码\0_单片机编程模式的发展\ 3_C语言使用标准开发

    1.6K20

    C语言的那些事儿)

    我们今天,就来聊聊关于编程开发中的文件的事儿。首先你得搞明白,文件英文叫library,意即图书馆或档案,因此(图书馆)就是包含了一堆可重定位文件(图书)的地方。...卖书的书城相当于静态,借书的图书馆相当于动态。这两种模式,各有千秋,表述如下: 什么是 静态 记住,静态就是只卖不借的商业书城。...对照着,再来来看看动态是怎么回事。 什么是 动态 记住,动态就是只借不卖的学校图书馆。其特点是: 1,馆中的图书概不出售,想要看某一本书的读者可以预约(编译),届时到图书馆直接看即可(运行)。...2,N个程序可以同时链接到同一个动态,共享同一段代码。 3,链接动态的程序,运行的时候需要依赖于该动态。 4,万一某天该动态不可用,或者程序搬到别的无该支持的平台,则程序无法运行。...5,运行的时候需要临时链接,效率比静态的直接运行要低一点点。 综上所述,动态跟静态各有所长,但权衡利弊,动态节省了大量的空间,牺牲了一点点的效率,因此动态相对而言运用更加广泛。

    92360

    C 语言使用 HAL 开发

    C 语言使用 HAL 开发 ST公司先后推出了两套主要:标准外设(Standard Peripherals Library)和HAL(Hardware Abstraction Layer)。...本章涉及的代码位于100ASK_STM32F103开发板资料的“5_程序源码\0_单片机开发模式的发展\2_C语 言使用HAL开发\”。...代码段 6.5.1 C 语言使用 HAL 开发(main.c) #include "main.h" #include "driver_led.h" int main(void) { // 初始化 HAL...将GPIO属性封装为结构体,通过设置结构体成员的属性,完成对GPIO的设置; 以上代码就实现了对开发板三色灯的红色灯交替闪烁效果,读者可以打开配套资料的“5_程序源码\0_单片机编程模式的发展\ 4_C语言使用...随后介绍的四种开发模式,读者重点理解C语言操作寄存器开发和使用HAL开发。

    1.7K20

    推荐官方开源 PInvoke 包含大量 win32 封装

    在调用 win32 的时候,小伙伴会遇到的问题是不知道对应的 win32 函数应该如何写。或者在网上抄了的代码的实现都有些诡异,想要自己封装发现工作量太大。...好消息是官方将 PInvoke 在 dotnet 基金会完全开源,包含了大量的 Win32 ,如 gdi32.dll 和 kernel32.dll 和 user32.dll 等 使用官方的的优势是什么呢...但是因为此项目是在 github 开源 因此也会有大量的小伙伴入坑不断的修复,相对来说应该会比自己实现的好一些 现在官方已经将大量的 dll 进行了封装 已经实现的 dll 如下 Library Package...SECURITY_ATTRIBUTES.Create(); Kernel32.CreateProcess ( lpApplicationName: @"C:...blog.lindexi.com/post/%E6%8E%A8%E8%8D%90%E5%AE%98%E6%96%B9%E5%BC%80%E6%BA%90-PInvoke-%E5%BA%93-%E5%8C%

    1.4K20

    C语言操作redis数据

    前言 redis(Remote Dictionary Server)是一个使用ANSI C编写的开源、支持网络、基于内存、可选持久性的键值对存储数据--来自维基百科。...由于其读写性能高、数据结构丰富、支持主从复制、支持持久化等其他特性,使得redis成为当前最流行的key-value型数据。本文将简单介绍c语言中如何操作redis数据。...准备工作 hiredis安装 hiredis是redis官方推荐的基于C接口的客户端组件,它提供接口,供c语言调用以操作数据。...接口介绍 函数原型:redisContext *redisConnect(const char *ip, int port); 说明:该函数用来连接redis数据,参数为数据的ip地址和端口,通常默认端口为...实例 实例通过redis数据的hash表存储以下学生信息: 字段名 含义 sid 学号 name 学生姓名 gender 学生性别 major 专业 c语言描述如下: #define SID_MAX_LENGHT

    3.9K40
    领券