Tengo curiosidad.
bash-3.00$ ldd libmylibrary.so
ldd: warning: you do not have execution permission for `libmylibrary.so'
Todo parece funcionar bien solo con + r. Me di cuenta de que la mayoría de los .so en / usr / lib tienen conjunto + x ...
¿Por qué se supone que las bibliotecas compartidas tienen un conjunto de bits ejecutable? ¿Qué podría pasar si no lo configuro?
Respuestas:
En realidad depende de la
ldd
implementación.ldd
generalmente es un script, puede editarlo para ver dónde y por qué obtiene ese error.En Ubuntu 10.04, solo
ldd
busca elread
permiso. Puede que el error no sea un ejecutable dinámico si el archivo no es un ELF ( formato ejecutable y enlazable ). Las librerías aquí son todas-rw-r--r--
, por ejemploNo es sorprendente querer
x
tener acceso a una biblioteca compartida. Elexecutable
modo es una convención que le da al sistema operativo otro nivel de control de derechos de acceso. El cargador ejecutable controla ese acceso, para garantizar que el usuario pueda ejecutarlo, pero también para evitar errores (algunas personas no deberían ejecutar algunos scripts o programas).Esto podría extenderse a las bibliotecas compartidas por la misma razón, pero las bibliotecas compartidas no pueden ejecutarse por sí mismas y son menos propensas a ser utilizadas por accidente ). Por lo tanto, la necesidad es menos obvia (el
r
acceso es suficiente).fuente
En realidad, puede ejecutar muchas bibliotecas, vea, por ejemplo, lo que sucede cuando escribe
/lib/libc.so.6
en su shell en un sistema GNU / Linux reciente.fuente
piense como tener un archivo ejecutable con -x. No podrás ejecutarlo. Considere estas bibliotecas como una colección de funciones generales, que están siendo llamadas por otro programa (digamos myProgra). Si no puede ejecutar las bibliotecas / funciones ... entonces no tiene nada
Un ejemplo
Ahora, si coloca function1 y function2 en otro archivo y lo incluye, entonces usted es una biblioteca. (Por supuesto, es algo más complicado. Esto es solo un ejemplo)
Pero en cualquier caso, como puede ver, debe ejecutar el código que se incluye en la biblioteca
fuente
La clave es el formato de archivo, formato ejecutable y enlazable. Dado que se usa el mismo formato de archivo exacto para identificar tanto una biblioteca ejecutable como una compartida, ambas deben tener los permisos ejecutables apropiados para el cargador del sistema operativo. Esto permite que un solo cargador y los ejecutables se utilicen como DSO si incluyen una tabla de símbolos.
fuente