SylixOS 动态库更新 version 不一致的问题

SylixOS 动态库更新 version 不一致的问题

Q:SylixOS 动态库更新 version 不一致的问题
首先 SylixOS 是允许多个进程对共享库文件进行代码段共享的(默认是共享打开的,可以使用 dlconfig share dis 命令进行关闭),代码段共享会出现一个问题:当 A  进程 使用一个 share.so 共享库的时候,B 进程也使用 该 share.so 的共享库,share.so 共享库因为 B 的原因需要修改,修改后,更新share.so文件,然后重启 B 进程,一般来说会出现错误,错误如下:
[root@sylixos:/apps/sample]# [ld]Warning: Share library /lib/libcalc_lib.so OS-version ô, is not compatible with current SylixOS version.
Re-build this module with current SylixOS version, may solve this problem.
[ld]Load sub-library error Module version not fix to current OS!

 出现该错误的原因是 B 进程发现最新的 so 和当前共享的 so 版本不一致了。
解决方法是执行 dlconfig refresh /xxx/xxx/share.so,执行完此命令清除共享库共享信息的缓冲,就会解除之前 share.so 的代码段共享。之后装载的共享库, 将从新计算共享代码段。
注意:如果共享库大小小于4K ,共享库的代码是不共享的,因此,如果多个进程共享一个动态库,且该动态库代码段小于 4K ,动态库更新和使用,是不会出现任何打印的。


    • Related Articles

    • qt5中链接使用.so动态库及相关函数

      Q:如何在qt5中链接使用.so动态库及相关函数 1. 编译生成动态库文件并上传至SylixOS文件系统内(需要上传至qt5的path目录内) 图1 编写并生成动态库工程 图2 上传动态库文件 qt5的path目录可env命令查看,见下图 图2 查看qt5默认库路径 2. 在qt工程pro文件内添加动态库相关本地配置(用于编译) 图4 增加动态库链接配置 3. 部署qt应用程序至SylixOS设备中 4. 运行测试 图5 程序运行测试
    • error: xxx-sylixos-elf-lzocom.exe

      Q:IDE 在编译工程时出现:xxxx-sylixos-elf-lzocom.exe  应用程序出错。 应用程序无法正常启动(0xc000007b)。请单击“确定”关闭应用程序。信息如下图所示。 安装 vc2010_redist_x86.exe 即可解决此问题, 此文件在 IDE 软件安装包的 Tools 目录下(如 SylixOS IDE 3.9.11_professional\Tools) 。
    • 运行警告 "WARNING: ctx.vmem create error!" ?

      Q: SylixOS 程序运行时警告 "WARNING: ctx.vmem create error!" ? A:  SylixOS 动态加载器在加载应用程序后会尝试申请虚拟地址空间,如果申请的空间过大,会导致申请失败, 出现 "WARNING: ctx.vmem create error!"        可以调整环境变量SO_MEM_PAGES定义的大小,从而缩小申请的空间大小,避免出现警告
    • error adding symbols:Bad value

      Q:SylixOS 系统编译引用了静态库的 App 时报错,怎么解决? 应用程序在引用静态库的时候只能选择 SylixOS Shared Lib 创建出的静态或动态库,只有 SylixOS Shared Lib 创建出的库才具有动态装载功能。 出现类似这种原因是因为使用了SylixOS Kernel Static Lib 创建出的静态库,这一类库是不具备动态装载能力的,即使编译可以通过,在复杂程序中运行也会受到干扰。
    • 手动修改 SylixOS 工程类型的方法

       问题描述:        当我们想要通过 IDE 重新选择已有 SylixOS Project 的 base 时,如果 base 的类型需要变化,会遇到如下图所示的问题"SylixOS Base project invalid",导致无法选择想要的base。 问题原因:        当base类型变化了,创建SylixOS Project时,工程设置里设定了base的类型。 解决方法一:       ...