[eside-ghost] Compilación estática
Alfredo Beaumont
alfredo.beaumont en gmail.com
Lun Abr 14 11:31:53 CEST 2008
Al, 2008eko Apiren 14a(e)an, Jon Urionaguena(e)k idatzi zuen:
> Aupa,
>
> > No estoy familiarizado con la libreria pcap, pero por lo que veo, tu
>
> tienes algun programa/libreria que hace uso de ella. Y lo que quieres es
> que el programa/libreria lleve empotrado pcap, si no me equivoco.
>
> En principio, eso es lo que necesito, aunque tal y como dice Alfredo,
> puedo simplemente crear dos entornos de librerías, uno el de sistema
> (/lib) y otro en /usr/local/lib/. El tema de esto último es que
> pretendía tener todo "lo nuevo" (kernel parcheado y tal) también en
> /usr/local/, ya que tengo que compilar todas las apps a manija, y como
> luego hay que ejecutar los temas de ldconfig y tal, no quería mezclar
> esas dos partes. Pretendía quedarme con el primer entorno con un binario
> "monolítico", y el segundo con la librería ya modificada. Igual estoy
> diciendo una burrada y es más sencillo como dices...
>
> ¿Sólo con indicar al linkar dónde están las librerías con
> LD_LIBRARY_PATH valdría? Es decir, me invento un /usr/local/lib2/ para
> este entorno "viejo", linko, y luego creo el "nuevo" /usr/local/lib/ y
> vuelvo a linkar todas las apps nuevas... ¿Cómo lo veis?
No lo necesitas indicar al linkar, sino al ejecutar. Es decir, al tener un
linkado dinámico, lo que hace el binario es cargar esas librerías
dinámicamente al ejecutarse. Con LD_LIBRARY_PATH lo que estás indicando es
dónde debe buscar esas librerías que debe cargar el binario. Con lo cual, no
necesitas compilar dos veces el binario (suponiendo que la librería sea
compatible). Basta con que en un caso tengas activada esa variable de entorno
apuntando a /usr/local/lib y en el otro caso no la tengas. Por si no me
explico bien, supongamos que tengas dos shells, en la primera, con el entorno
normal, deberías hacer:
# /usr/bin/ntop
Esto lanzará ntop que cargará /usr/lib/libpcap0.8. En el entorno parcheado,
deberías hacer:
# export LD_LIBRARY_PATH=/usr/locali/lib
# /usr/bin/ntop
Esto lanzará ntop con libpcap parcheada en /usr/local/lib/libpcap0.8.
> > 1) Que pcap esté compilado generando los .a
>
> Estoy en Debian y tengo instalado libpcap0.8 y libpcacp0.8-dev de la
> paquetería. Es contra este último (/usr/lib/libpcap.a) contra el que
> quiero compilar ntop
>
> > Esa opción no parece que indique una compilación estática de ntop,
>
> más bien de sus plugins (comprueba que gcc use -static al linkar).
>
> Eso pensaba yo, pero en el propio código viene esto (del cvs, se supone
> que es actual...)
>
> " 2.2 Build a static ntop
>
> Sometimes you want to build ntop statically so that both shared
> libraries
> and plugins are included in the main program. In order to do that
> you need
> to:
>
> - cd ntop
> - ./autogen.sh --enable-static-plugins
> - make sntop
>
> The final binary is called sntop (static ntop).
> "
No utiliza autotools ? Para mí que te falta un paso ahí:
$ cd ntop
$ ./autogen.sh
$ ./configure --enable-static-plugins
$ make sntop
>
> Aunque tengo comprobado que en el Makefile no hay ningún "target"
> sntop... Así que me he quedado igual. De todas maneras, voy a navegar en
> el Makefile a ver si veo la opción "static" activada, porque, ¿Eso me
> aseguraría el crear el binario con todo dentro, no?
Sí, es una opción de linkado, con lo que basta con aparecer en la línea en la
que gcc linka, p. ej:
gcc -o ntop -c porrón de ficheros objeto -static
o lo que es lo mismo, si utiliza autotools, bastaría con hacer un:
LDFLAGS=-static ./configure
A ver si te sirve :)
Saludos
--
Alfredo Beaumont Sainz
http://www.alfredobeaumont.org/blog.cgi
Más información sobre la lista de distribución eside-ghost