Na verdade, depende da implementação de ldd
. ldd
geralmente é um script, você pode editá-lo para ver onde e por que você recebeu esse erro.
No Ubuntu 10.04, ldd
verifica apenas a permissão read
. Ele pode dar o erro não um executável dinâmico se o arquivo não for um ELF ( Formato Executável e Linkable ). As libs 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
de acesso para uma biblioteca compartilhada. O modo executable
é uma convenção que fornece ao SO 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 para as bibliotecas compartilhadas pela mesma razão - mas as bibliotecas compartilhadas não podem executar por si mesmas, e são menos propensas a erros por acidente ). Assim, a necessidade é menos óbvia (o acesso r
é suficiente).