Что делает команда cd / etc?

Agregando esto como otra respuesta porque la otra aún puede valerse por sí misma, pero su problema (después de que aclaró )es diferente. Si se trata de bibliotecas que se envían con su aplicación y también por el sistema, entonces la situación no es comparable. Casi ha llegado a lo que debe hacer para solucionarlo, pero no del todo:-)

Hay varias soluciones a su problema :LD_LIBRARY_PATH, rpath, enviar bibliotecas modificadas y compilar varias veces. Cada uno tiene sus ventajas y problemas, así que déjame explicarte:

  • LD_LIBRARY_PATH

    Si sigue esta ruta, entonces establece una variable de entorno antes de ejecutar su programa. Probablemente requiera que use una secuencia de comandos contenedora alrededor de su binario (, es decir, en lugar de ejecutar directamente /path/to/my/php, ejecute una secuencia de comandos de shell que primero establece LD_LIBRARY_PATHy luego ejecuta/path/to/my/php).

    La desventaja de este método es que es un poco frágil:

    • LD_LIBRARY_PATHse antepone a la ruta de búsqueda de la biblioteca, pero no la reemplaza. Eso significa que si las bibliotecas en cuestión están instaladas en todo el sistema -pero, por alguna razón, las que envió no se pueden cargar, el enlazador dinámico recurrirá a las proporcionadas por el sistema -.
    • El requisito de llamar a un script de shell significa que tiene una llamada fork/exec adicional, lo que puede hacer que las cosas salgan mal. Esto se puede mitigar un poco usando el comando execen su script de shell (para que el script se reemplace por el binario php, y para que su programa php sea un hijo adecuado del padre ), pero todavía es desordenado

    Por otro lado, le permite cierta flexibilidad con el lugar donde almacena sus bibliotecas (, es decir, si el sistema -proporcionó una es lo suficientemente buena en algunos casos, está bien si la elimina de su LD_LIBRARY_PATHdirectorio)

  • rpath

    Aquí, la idea es que le diga al compilador (a través degcc -Wl,-rpath,'/path/to/library')exactamente dónde buscar la biblioteca. Esto se codifica en el programa en tiempo de compilación,y el enlazador dinámico ignorará absolutamente las versiones de la biblioteca que están fuera de su rpathproporcionada, incluidas las versiones proporcionadas por el sistema -. Esto evita el desorden del LD_LIBRARY_PATHanterior, pero la desventaja es que esto hace que las cosas sean menos flexibles; si necesita mover cosas en el sistema de archivos, debe volver a compilar todo.

    También significa que si sus usuarios quieren ver las cosas instaladas de una manera diferente, no tendrán suerte. Puede que no les guste eso.

Ambos métodos están documentados en la página del manual ld.so.

  • Envío de bibliotecas cambiadas

    Aquí, la idea es que en lugar de intentar vincular a libk5crypto.so.3, se vincula a libmycorp-k5crypto.so.3. No habrá ninguna posibilidad de que el enlazador dinámico recoja el sistema -provisto libk5crypto.so.3en ese caso. La ventaja aquí es que es bastante fácil y elegante una vez instalado; La desventaja es que la gente podría comenzar a preguntarse si cambió libk5cryptoen absoluto (y pedirle parches ), y también tendrá que profundizar en el sistema de compilación libk5crypto.sopara que realmente emita un libmycorp-k5crypto.sobiblioteca. También puede verse mal a largo plazo, así que tenga cuidado antes de seguir este camino.

  • Compilando varias veces

    En lugar de enviar las bibliotecas que también se proporcionan en todo el sistema -, puede simplemente compilar su aplicación en cada distribución admitida y enviar un paquete para todas y cada una de las distribuciones, en lugar de enviar sus bibliotecas. Cosas como packagecloud.io lo hacen más fácil de hacer. Dado que solo hay una biblioteca con un nombre dado en el sistema, solo hay una biblioteca para elegir y no hay posibilidad de elegir la incorrecta. La desventaja es que tiene una gama más amplia de cosas para probar, por lo que tiene más trabajo en el momento del lanzamiento (y es mejor que tenga un buen conjunto de pruebas ).

    La ventaja es que este método garantiza que envíe menos de lo que enviaría de otro modo (, por lo que tiene menos para admitir ), y puede decirles a los usuarios que están en una distribución que tiene una versión anterior de libk5crypto.soque ya no apoyas, que deberían actualizar eso primero.

-10
29.03.2016, 01:29
0 ответов

Теги

Похожие вопросы