Eu só estou curioso.
bash-3.00$ ldd libmylibrary.so
ldd: warning: you do not have execution permission for `libmylibrary.so'
Tudo parece funcionar bem apenas com + r. Notei que a maioria dos arquivos .so em / usr / lib possui + x set ...
Por que as bibliotecas compartilhadas deveriam ter um conjunto de bits executável? O que poderia acontecer se eu não o definir?
Respostas:
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
verificaread
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 exemploNão é chocante querer um
x
acesso para uma biblioteca compartilhada. Oexecutable
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).fonte
Você pode realmente executar muitas bibliotecas, veja, por exemplo, o que acontece quando você digita
/lib/libc.so.6
no seu shell em um sistema GNU / Linux recente.fonte
pense como ter um arquivo executável com -x. Você não poderá executá-lo. Considere essas bibliotecas como uma coleção de funções gerais, que estão sendo chamadas por outro programa (digamos, myProgra). Se você não pode executar as bibliotecas / função ... então você não tem nada
Um exemplo
Agora, se você colocar function1 e function2 em outro arquivo e incluí-lo, terá uma biblioteca. (Claro que é algo mais complicado. Este é apenas um exemplo)
Mas, de qualquer forma, como você pode ver, é necessário executar o código que está sendo incluído na biblioteca
fonte
A chave é o formato do arquivo, formato executável e vinculável. Como o mesmo formato de arquivo exato é usado para identificar uma biblioteca executável e uma biblioteca compartilhada, ambos devem ter as permissões executáveis apropriadas para o carregador do SO. Isso permite que um único carregador e executáveis sejam usados como DSO se eles incluírem uma tabela de símbolos.
fonte