Hello Library 库

更新时间:
2024-05-13
下载文档

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 添加会自动适应工程的 ReleaseDebug 版本)。

  • 修改 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 按钮完成设置。

文档内容是否对您有所帮助?
有帮助
没帮助