名称

uselib-加载共享库

语法

#包括

int uselib(const char * library);

注意:glibc标头中未提供此系统调用的声明;请参阅注释。

另外参见

ar(1),gcc(1),ld(1),ldd(1),mmap(2),open(2),dlopen(3),功能(7),ld.so(8)

返回值

成功时,返回零。如果出错,则返回-1,并正确设置errno。

备注

glibc不支持此过时的系统调用。 glibc标头中未提供任何声明,但是经过一段古怪的历史,2.23之前的glibc版本确实为此系统调用导出了ABI。因此,为了使用此系统调用,在代码中手动声明接口就足够了。或者,您可以使用syscall(2)调用系统调用。

在古老的libc版本中,uselib()用于加载共享库,其名称在二进制文件的名称数组中找到。

从libc 4.3.2开始,启动代码会在放弃之前尝试在这些名称前加上" / usr / lib"," / lib"和""。在libc 4.3.4及更高版本中,将在LD_LIBRARY_PATH中找到的目录中查找这些名称,如果未在其中找到,则尝试使用前缀" / usr / lib"," / lib"和" /"。

从libc 4.4.4开始,仅加载库" /lib/ld.so",以便该动态库可以加载所需的其余库(再次使用此调用)。这也是libc5中的状态。

glibc2不使用此调用。

从Linux 3.15开始,仅当使用CONFIG_USELIB选项配置内核时,此系统调用才可用。

出版信息

这个页面是Linux手册页项目5.08版的一部分。有关项目的说明、有关报告错误的信息以及此页面的最新版本,请访问https://www.kernel.org/doc/man-pages/

USELIB - Linux手册页

Linux程序员手册 第2部分
更新日期: 2017-09-15

遵循规范

uselib()是特定于Linux的,不应在旨在可移植的程序中使用。

说明

系统调用uselib()用于加载要由调用进程使用的共享库。它被赋予一个路径名。在库本身中找到要加载的地址。该库可以具有任何公认的二进制格式。

错误说明

除了open(2)和mmap(2)返回的所有错误代码之外,还可能返回以下内容:

EACCES
由library指定的库没有读取或执行许可权,或者调用者没有路径前缀中目录之一的搜索许可权。 (另请参见path_resolution(7)。)
ENFILE
已达到系统范围内打开文件总数的限制。
ENOEXEC
库指定的文件不是已知类型的可执行文件。例如,它没有正确的幻数。
日期:2019-08-20 17:59:36 来源:oir作者:oir