Na verdade, depende da ldd
implementação. ldd
geralmente é um script, você pode editá-lo para ver onde e por que esse erro ocorre.
No Ubuntu 10.04, ldd
verifica read
apenas a permissão. Pode dar ao erro um executável dinâmico se o arquivo não for um ELF (formato executável e vinculável ). As bibliotecas aqui são todas -rw-r--r--
, por exemplo
$ 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
Não é chocante querer um x
acesso para uma biblioteca compartilhada. O executable
modo é uma convenção que fornece ao sistema operacional outro nível de controle de direitos de acesso. O carregador executável controla esse acesso, para garantir que o usuário possa executá-lo, mas também para evitar erros (alguns scripts ou programas não devem ser executados por algumas pessoas).
Isso pode ser estendido às bibliotecas compartilhadas pelo mesmo motivo - mas as bibliotecas compartilhadas não podem ser executadas sozinhas e são menos propensas a serem usadas por acidente ). Assim, a necessidade é menos óbvia (o r
acesso é suficiente).