Questions tagged «shared-library»

2
为什么某些共享库是可执行文件,为什么以及如何运行?
在32位Linux系统上,调用此 $ /lib/libc.so.6 在64位系统上 $ /lib/x86_64-linux-gnu/libc.so.6 在外壳中,提供如下输出: GNU C Library stable release version 2.10.1, by Roland McGrath et al. Copyright (C) 2009 Free Software Foundation, Inc. This is free software; see the source for copying conditions. There is NO warranty; not even for MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. …

6
我的系统使用什么C库版本?
如何确定系统使用的userland C库?需要此信息的可能原因包括: 我正在考虑下载一个巨大的源程序包,我相信它将进行适当的检查并列出一个最小的库版本,但是我宁愿先检查一下是否可以工作,以免自己陷入麻烦。 我担心我要尝试在系统的程序包管理系统外部安装的某些第三方二进制文件的ABI兼容性。 我有一个源软件包,其文档中提到需要最低版本的系统库,但是构建过程不会执行任何检查。 我正在构建针对特定系统的交叉编译器,并且不想冒前向兼容性问题的风险。



1
为什么Unix / Linux系统不遍历目录,直到找到所需的链接库版本?
我有一个名为“ alpha”的二进制可执行文件,它需要一个链接库(libz.so.1.2.7),该库位于 /home/username/myproduct/lib/libz.so.1.2.7 我通过执行以下命令在生成二进制可执行文件之前将其导出到终端实例。 export LD_LIBRARY_PATH=/home/username/myproduct/lib/:$LD_LIBRARY_PATH 现在,当我生成另一个需要相同库但版本不同的应用程序“ bravo”时,即(libz.so.1.2.8)(可在中使用) /lib/x86_64-linux-gnu/libz.so.1.2.8,系统抛出以下错误。 version `ZLIB_1.2.3.3' not found (required by /usr/lib/x86_64-linux-gnu/libxml2.so.2) 如果我未设置LD_LIBRARY_PATH,则“ bravo”启动正常。我了解上述行为是因为LD_LIBRARY_PATH在/etc/ld.so.conf查找链接库时优先于在其中定义的目录路径,因此发生了上述错误。我只是很好奇一个为什么UNIX / LINUX的开发人员没有设计OS以便如果库的第一个实例是不同版本的情况下就根据层次结构在其他目录中搜索链接的库。 简而言之,UNIX / LINUX系统遍历一组目录,直到找到所需的库为止。但是,为什么在找到期望的版本而不是接受库的第一个实例而不考虑其版本之前,它不做同样的事情?

3
如何检查是否安装了共享库?
我的问题来自启动ffmpeg的问题。我已经安装了ffmpeg,它显示为已安装: whereis ffmpeg ffmpeg: /usr/bin/ffmpeg /usr/bin/X11/ffmpeg /usr/share/ffmpeg /usr/share/man/man1/ffmpeg.1.gz 后来,我发现某些程序依赖于安装本身不附带的库,因此我使用ldd命令检查了缺少的内容: # ldd /usr/bin/ffmpeg linux-vdso.so.1 => (0x00007fff71fe9000) libavfilter.so.0 => not found libpostproc.so.51 => not found libswscale.so.0 => not found libavdevice.so.52 => not found libavformat.so.52 => not found libavcodec.so.52 => not found libavutil.so.49 => not found libm.so.6 => /lib/x86_64-linux-gnu/libm.so.6 (0x00007f5f20bdf000) libpthread.so.0 => /lib/x86_64-linux-gnu/libpthread.so.0 …

2
动态链接器/加载器本身如何像`file`所报告的那样动态链接?
考虑的共享对象相关性/bin/bash,其中包括/lib64/ld-linux-x86-64.so.2(动态链接器/加载器): ldd /bin/bash linux-vdso.so.1 (0x00007fffd0887000) libtinfo.so.6 => /lib/x86_64-linux-gnu/libtinfo.so.6 (0x00007f57a04e3000) libdl.so.2 => /lib/x86_64-linux-gnu/libdl.so.2 (0x00007f57a04de000) libc.so.6 => /lib/x86_64-linux-gnu/libc.so.6 (0x00007f57a031d000) /lib64/ld-linux-x86-64.so.2 (0x00007f57a0652000) 检查/lib64/ld-linux-x86-64.so.2表明它是与以下内容的符号链接/lib/x86_64-linux-gnu/ld-2.28.so: ls -la /lib64/ld-linux-x86-64.so.2 lrwxrwxrwx 1 root root 32 May 1 19:24 /lib64/ld-linux-x86-64.so.2 -> /lib/x86_64-linux-gnu/ld-2.28.so 此外,file报告/lib/x86_64-linux-gnu/ld-2.28.so本身可以动态链接: file -L /lib64/ld-linux-x86-64.so.2 /lib64/ld-linux-x86-64.so.2: ELF 64-bit LSB pie executable, x86-64, version 1 (SYSV), dynamically linked, …

2
如何找出已安装库的版本号?
与RedHat / CentOS相关的问题。我对软件包和库以及如何将它们固定到固定版本之间有些困惑。 最近的libxcb版本中存在一个X11转换错误,会影响我的C程序。libxcb-1.5-1没有该错误。 所以我做了: # yum remove libxcb-devel # rpm -Uvh --oldpackage libxcb-1.5-1.el6.i686.rpm 现在错误消失了,我的软件运行正常。 快进几周,错误又回来了。 # yum info libxcb-devel Loaded plugins: refresh-packagekit, security Available Packages Name : libxcb-devel Arch : i686 Version : 1.9.1 Release : 2.el6 Size : 1.0 M Repo : sl-security 但是安装的版本或可通过仓库访问的版本吗?我如何知道当前安装了哪个版本的libxcb? $ ll /usr/lib/libxcb.so* lrwxrwxrwx …

2
为什么不能安装共享库的多个版本?
在某些情况下,某个程序将依赖于库版本xy,而另一个依赖于库版本xz,但据我所知,没有软件包管理器允许我同时安装xy和xz有时它们将同时允许两个主要版本(例如qt4和qt5,它们可以同时安装),但(似乎)绝不是次要版本。 为什么是这样?例如,阻止它的限制因素是什么?我认为一定有充分的理由不允许这种看似有用的功能。例如,在加载共享库时,没有字段指示要加载哪个版本,因此Linux无法知道如何决定加载哪个版本?还是真的没有理由吗?像所有次要版本一样,还是应该兼容的?

3
sudo之后LD_LIBRARY_PATH总是空白
每当我似乎手动安装软件时,都会出现共享库错误。执行后,echo $LD_LIBRARY_PATH它显示为.. 无。我尝试将文件添加/usr/local/lib到其中.conf,/etc/ld.so.conf.d但似乎从未执行过。 这是行不通的(用引号或其他方式): LD_LIBRARY_PATH="/usr/local/lib" export LD_LIBRARY_PATH sudo ldconfig -v 该值将被临时设置,但是如果我退出一个终端窗口,它将不会保留该值。重新启动也不执行任何操作。

1
跟踪Linux / ARM中的库调用的工具
我正在寻找一种工具,该工具可以跟踪对Linux / ARM共享库中的函数的调用。基本上,我希望能够指定一个命令行,并让该工具生成记录的被调用库函数和传递的参数。我想象某种形式的函数挂钩可以用于此目的。 我知道ltrace,它提供了我所需的功能。但是,ltrace它不适用于我: 跟踪更复杂的程序时通常会出现段错误。 非常慢 我正在寻找一个更强大的替代方案。速度不错,但不是我最关心的。首先,我希望有一种跟踪库调用的方法,该方法可以分析任何(非规避)程序。 Sysdig在ARM中也不起作用,并且dtrace的端口仅在NetBSD中仍在beta中工作。 有人知道这种工具处于可用状态吗?

1
/ proc / pid / maps中的共享库映射
为什么/proc/pid/maps在同一个库中包含一些记录?这是一个例子: 7fae7db9f000-7fae7dc8f000 r-xp 00000000 08:05 536861 /usr/lib/x86_64-linux-gnu/libstdc++.so.6.0.20 7fae7dc8f000-7fae7de8f000 ---p 000f0000 08:05 536861 /usr/lib/x86_64-linux-gnu/libstdc++.so.6.0.20 7fae7de8f000-7fae7de97000 r--p 000f0000 08:05 536861 /usr/lib/x86_64-linux-gnu/libstdc++.so.6.0.20 7fae7de97000-7fae7de99000 rw-p 000f8000 08:05 536861 /usr/lib/x86_64-linux-gnu/libstdc++.so.6.0.20 这是什么意思 ?

1
vdso共享库(linux-vdso.so)是包含内核对象代码(系统调用)的库吗?
我注意到我编译到gcc的所有程序都链接到vdso库。这个库是否包含对内核的系统调用(如mmap()和fork()以及其他系统调用)的库? 我知道系统调用不是GNU C标准库的功能,因此它们的目标代码必须位于在编译时与应用程序链接的某个库中吗? 那么vdso是那个库吗?
By using our site, you acknowledge that you have read and understand our Cookie Policy and Privacy Policy.
Licensed under cc by-sa 3.0 with attribution required.