我只是好奇。
bash-3.00$ ldd libmylibrary.so
ldd: warning: you do not have execution permission for `libmylibrary.so'
Run Code Online (Sandbox Code Playgroud)
使用 +r 似乎一切正常。我注意到 /usr/lib 中的大多数 .so 确实设置了 +x ...
为什么共享库应该设置可执行位?如果我不设置它会发生什么?
实际上这取决于ldd
实施。ldd
通常是一个脚本,您可以对其进行编辑以查看在何处以及为何会出现该错误。
在 Ubuntu 10.04 上,仅ldd
检查权限read
。如果文件不是 ELF(可执行和可链接格式) ,则可能会给出错误,不是动态可执行文件。例如,这里的库都是-rw-r--r--
$ find /usr/lib -type f -name "libm*.so*" -ls
(...)
-rw-r--r-- 1 root root 216800 Feb 26 22:20 /usr/lib/libmp.so.3.1.16
-rw-r--r-- 1 root root 76728 Mar 14 04:23 /usr/lib/libmjpegutils-1.9.so.0.0.0
-rw-r--r-- 1 root root 134464 Jan 29 2010 /usr/lib/libm17n-core.so.0.3.0
-rw-r--r-- 1 root root 290480 Feb 17 2010 /usr/lib/libmtp.so.8.3.2
Run Code Online (Sandbox Code Playgroud)
x
想要访问共享库并不令人震惊。该executable
模式是一种约定,为操作系统提供了另一级别的访问权限控制。可执行加载程序控制该访问,以确保用户可以执行它,同时也防止错误(某些脚本或程序不应该由某些人执行)。
出于同样的原因,这可以扩展到共享库 - 但共享库不能自行运行,并且意外使用时不太容易出错)。因此,需求不太明显(r
访问就足够了)。
归档时间: |
|
查看次数: |
11998 次 |
最近记录: |