嵌入式学习笔记之二(静态链接与动态链接)

本文介绍了静态链接和动态链接的概念及其区别。通过示例展示了如何在Linux环境下创建和使用动态链接库,包括编译源文件、生成动态库及解决运行时依赖问题。静态链接生成的程序包含所有库,文件较大;而动态链接生成的程序轻便,依赖外部动态库。在实际操作中,动态链接库的使用涉及到库文件的位置,如需运行,需确保库文件在系统路径中。

        要了解静态链接与动态链接,首先要了解什么是静态链接和动态链接,这一部分这里不做讲解,可以去度娘查找。

1.静态链接

静态链接通过静态库进行链接,生成的目标程序中包含运行需要的所有库,可以直接运行,不过就是文件比较大。静态库是汇编产生的.o 文件的集合,一般以.a 文件形式出现。gcc 在使用静态链接的时候需要加上-static 参数。

 2。动态链接

动态链接使用动态链接库进行链接,生成的程序在执行的时候需要加载所需要的动态库才能运行,动态链接程序轻便,但必须依赖动态库。Linux 下的动态链接库实际上是共享目标文件,一般是以.so 文件形式存在。GCC 默认是动态链接不需要加参数。
举例子看一下动态链接库的使用方法。使用 gedit 创建三个 C 语言文件,如下。

 通过两个变量相加的方式来举例说明
mymath.h

 mymath.c

 最后来一个测试文件 test.c(在这里需要注意的一个小细节,调用自己写的.h 文件时,必须使用双引号,“xxxx.h”)

 

 然后就可以编译了,因为 test 引用了 mymath.h,所以不能单独编译,gcc test.c mymath.c 一起进行,否则就就会报错。(如下编译正确)

 接下来是生成动态链接库的方法,gcc -shared xx -o xxx.so,当我们使用Cat 去进行查看的时候会发现,so 文件里全是乱码,这就是使用动态链接库的一个好处,可以防止核心算法的泄露。

 现在就可以秘密将 mymath.c 删除掉了

 

 直接调用库编译发现程序不能运行。

 下面将我们自己建立的库移动到 /usr/lib 目录下试试,然后发现代码运行成功。

结束。 

### 关于嵌入式系统的推荐学习资料 对于希望深入理解嵌入式系统的读者而言,可以从多个方面入手获取全面的知识。以下是几个重要的知识点以及相应的参考资料: #### 1. 嵌入式系统硬件组成 了解嵌入式系统的构成是入门的基础。这包括但不限于嵌入式微处理器、协处理器、存储器和 I/O 接口等组件。其中,嵌入式微处理器作为整个硬件层的核心部分,承担着数据运算的任务[^1]。 #### 2. 深入探讨 ARM 架构及其应用 ARM 架构因其低功耗高效率的特点,在移动设备和其他便携式电子产品中广泛应用。研究者可以关注 V7 架构下的 ARM 处理器选型指南,掌握不同型号之间的区别及适用场景;同时也要熟悉 CPU 和 GPU 结合形成的异构计算平台所带来的性能提升潜力[^2]。 #### 3. SoC 片上系统概念解析 SoC (System on Chip) 是现代电子产品的核心技术之一。通过阅读有关 SoC 的定义、其内部结构特点以及相对于传统设计的优势等内容,能够帮助初学者建立起完整的知识框架。 #### 4. 总线技术和 DMA 控制机制 总线技术决定了各个模块间的数据传输方式,而直接内存访问(DMA)则允许外设绕过 CPU 进行高效的数据交换。这些主题都是构建稳定可靠嵌入式应用程序不可或缺的一部分。 #### 5. 存储解决方案的选择 针对不同类型的应用需求选择合适的存储介质至关重要。例如 DRAM/SRAM 差别分析可以帮助开发者更好地平衡成本性能指标;而对于长期保存大量静态数据,则需考虑 Flash 或 SSD 等非易失性存储方案。 #### 6. 软件开发工具链搭建 最后但同样重要的是要建立良好的编程实践习惯并熟练运用各种调试手段。无论是基于 Linux 平台还是其他操作系统之上创建高效的编译链接流程都将是后续项目成功实施的关键因素。 ```bash # 安装交叉编译工具链示例命令 sudo apt-get install gcc-arm-linux-gnueabi ```
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包

打赏作者

six2me

你的鼓励将是我创作的最大动力

¥1 ¥2 ¥4 ¥6 ¥10 ¥20
扫码支付:¥1
获取中
扫码支付

您的余额不足,请更换扫码支付或充值

打赏作者

实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值