Hello Library 库
本质上来说库是一种可执行代码的二进制形式,可以被操作系统载入内存执行。
库分类
SylixOS 的库分为静态库和共享库(也称作动态库或动态链接库),二者的不同在于库代码被载入的时间不同。
- 静态库在程序编译的时候被链接到目标代码中(文件扩展名通常为.a),程序运行时不再需要动态装载该库。如果多个应用程序都需要使用相同的静态库,则每一个应用程序代码部分都链接了此静态库,因此应用程序代码体积较大。
- 动态库在程序编译时并不会被链接到目标代码中(文件扩展名通常为.so),而是在程序运行时才被载入,因此在程序运行时目标系统中需要存放动态库文件。多个应用程序使用同一动态库时,动态库在内存中被几个应用程序进程所共享,因此应用程序代码体积较小。
创建 Hello Library 工程
创建库工程的方法与创建应用程序工程的方法类似,不同的是在选择工程模板上需要选择 SylixOS Shared Lib。点Finish 完成库工程的创建。
编译 Hello Library 工程
编译方法与编译 helloworld 工程的方法相同,编译完成后将生成库文件列表。
部署库文件
SylixOS 共享库文件通常存放在 SylixOS 的/lib 下或者环境变量 LD_LIBRARY_PATH 所指定的目录下,可根据具体情况做相应调整。
修改 Hello world 应用程序
这一节介绍 SylixOS 的应用程序如何使用动态库,在 helloworld 工程的基础上做以下修改:
添加动态库(通过 Output 添加会自动适应工程的 Release 和 Debug 版本)。
修改 helloworld 源文件,使 helloworld 工程调用动态库。
#include <unistd.h> #include <stdio.h> extern void lib_func_test(void); int main (int argc, char *argv[]) { while (1) { lib_func_test(); sleep(1); } return (0); }
运行 Hello world 应用程序
将上一节修改完成的代码重新编译,再将生成的结果文件上传到 SylixOS 设备并运行,观察运行结果。
# ./helloworld
lib func_call!
lib func_call!
lib func_call!
lib func_call!
lib func_call!
调试 Hello world 应用程序与动态库
在调试过程中,有时需要跳到库函数中做程序的进一步分析,这个时候就要借助于 RealEvo-IDE 动态库调试的方式来完成,为了实现对动态库进行调试,需要对 RealEvo-IDE 进行以下设置。
选中 helloworld 工程,打开 Debug Configurations 对话框,打开 Debugger 标签页在 Library Paths Setting 处选择 Add library paths from project setting,单击 Apply 按钮完成设置。