动态库自动装载

更新时间:
2024-01-10
下载文档

动态库自动装载

链接动态库

自动装载动态库是在程序运行前自动装载所依赖的库文件,而具体依赖于哪些库文件在链接时决定。例如,运行下面的链接命令可以将 libvpmpdm.so、libsubfun.so、libm.a、libgcc.a 链接到 app 可执行程序。链接器会根据具体条件加载动态库或静态库,本例中的 libm.a 和 libgcc.a 为编译器自带的静态库。

arm-sylixos-eabi-g++ -mcpu=cortex-a8 -nostdlib –fPIC –shared –o app app.o 
–lvpmpdm -lsubfun –lm –lgcc

链接完成后,可使用 arm-sylixos-eabi-readelf 命令查看应用程序所依赖的动态库。

windows> arm-sylixos-eabi-readelf -d app
Dynamic section at offset 0x2cc contains 12 entries:
  Tag         Type                       Name/Value
 0x00000001 (NEEDED)                         Shared library: [libvpmpdm.so]
 0x00000001 (NEEDED)                       Shared library: [libsubfun.so]
 0x00000004 (HASH)                         0x94
 0x00000005 (STRTAB)                        0x1d4
 0x00000006 (SYMTAB)                        0xe4
 0x0000000a (STRSZ)                           133(bytes)
 0x0000000b (SYMENT)                      16(bytes)
 0x00000003 (PLTGOT)                     0x8354
 0x00000002 (PLTRELSZ)                       8(bytes)
 0x00000014 (PLTREL)                        REL
 0x00000017 (JMPREL)                    0x25c
 0x00000000 (NULL)                               0x0

下载动态库

使用 RealEvo-IDE 可下载动态库到 SylixOS,在下载之前,需确定动态库文件在 SylixOS 中的路径。SylixOS 中应用程序动态库的搜索路径依次如下:

  • Shell 当前目录。
  • LD_LIBRARY_PATH 环境变量中包含的搜索路径。
  • PATH 环境中包含的搜索路径。

以上环境变量中的路径以“:”(冒号)进行分隔,可使用 env 命令查看 SylixOS 环境变量,如下所示:

# env
variable show >>
       VARIABLE               REF                             VALUE
--------------------    --- --------------------------------------------------
TERMCAP                            /etc/termcap
TERM                                vt100
PATH_LOCALE                        /usr/share/locale
LC_ALL
LANG                               C
LD_LIBRARY_PATH                /usr/lib:/lib:/usr/local/lib
PATH                                /usr/bin:/bin:/usr/pkg/sbin:/usr/local/bin
NFS_CLIENT_PROTO                udp
NFS_CLIENT_AUTH                 AUTH_UNIX
SYSLOGD_HOST                   0.0.0.0:514
FIO_FLOAT                             1
SO_MEM_PAGES                    8192
TSLIB_CALIBFILE                 /etc/pointercal
TSLIB_TSDEVICE                  /dev/input/touch0
MOUSE                            /dev/input/mouse0:/dev/input/touch0
KEYBOARD                         /dev/input/keyboard0
TZ                               CST-8:00:00
TMPDIR                                  /tmp/
LICENSE                               SylixOS license: BSD/GPL.
VERSION                               1.2.1
SYSTEM                                SylixOS kernel version: 1.2.1 NeZha(a)

内核模块装载

内核模块不依附任何应用程序,所以无法在启动应用时自动装载。如果要实现内核模块的自动装载,可以在 SylixOS 启动脚本中使用装载命令实现。

SylixOS 内核模块装载器不能解决内核模块之间的依赖关系,需自行决定模块的加载顺序。SylixOS 不会自动搜索某个路径,需在加载命令中指定,通常 SylixOS 的内核模块被保存在/lib/modules 目录或其子目录中。内核模块的装载方法见“装载内核模块”。

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