elhacker.net cabecera Bienvenido(a), Visitante. Por favor Ingresar o Registrarse
¿Perdiste tu email de activación?.

 

 


Tema destacado: Recuerda que debes registrarte en el foro para poder participar (preguntar y responder)


+  Foro de elhacker.net
|-+  Programación
| |-+  Programación C/C++ (Moderadores: Eternal Idol, Littlehorse, K-YreX)
| | |-+  Compilar una librería dinámica como estática C
0 Usuarios y 1 Visitante están viendo este tema.
Páginas: [1] Ir Abajo Respuesta Imprimir
Autor Tema: Compilar una librería dinámica como estática C  (Leído 5,032 veces)
mester

Desconectado Desconectado

Mensajes: 219


https://www.youtube.com/watch?v=IlY9C6pzxKc


Ver Perfil WWW
Compilar una librería dinámica como estática C
« en: 2 Agosto 2016, 15:34 pm »

Hola.

Me surge el siguiente error cuando ejecuto un programa:  "error while loading shared libraries libmysqlclient.so.18"
Soy consciente del error, me falta la librería MySQL, pero el caso es... lo que quiero hacer es compilar mi programa y hacer que sea portable. Es decir, lo que quiero es poder compilar el programa para usar la libreria estaticamente en el programa. He probado con el parámetro -static-libgcc al compilar con gcc en Linux, pero ni caso.

Espero que me podáis ayudar. Si no entendéis lo que quiero expresar, educadamente preguntadme.

Gracias de antemano.


En línea

Justicia es dar a cada uno lo que se merece
ivancea96


Desconectado Desconectado

Mensajes: 3.412


ASMático


Ver Perfil WWW
Re: Compilar una librería dinámica como estática C
« Respuesta #1 en: 2 Agosto 2016, 16:01 pm »

Con -static, haces que las librerías de C++ se compilen estáticas.

Si quieres compilar estática una librería externa, tienes que obtenerla para linkeado estático.

Las librerías se suelen compilar de 2 modos:para estático, y para dinámico. Tú debes de tener la dinámica. Localiza la estática, si la tienen.

En caso de que ya la tengas, mira alguna guía de los creadores de esa librería para compilarla en estático.


En línea

mester

Desconectado Desconectado

Mensajes: 219


https://www.youtube.com/watch?v=IlY9C6pzxKc


Ver Perfil WWW
Re: Compilar una librería dinámica como estática C
« Respuesta #2 en: 2 Agosto 2016, 16:04 pm »

Con -static, haces que las librerías de C++ se compilen estáticas.

Si quieres compilar estática una librería externa, tienes que obtenerla para linkeado estático.

Las librerías se suelen compilar de 2 modos:para estático, y para dinámico. Tú debes de tener la dinámica. Localiza la estática, si la tienen.

En caso de que ya la tengas, mira alguna guía de los creadores de esa librería para compilarla en estático.

Si la estática la tiene, pero yo quiero saber si existe alguna manera de compilar la libraria dinamica de manera estatica en un programa. Porque es muy pesado que en cada proyecto tenga que añadir las librerias a cada carpeta y demás.
En línea

Justicia es dar a cada uno lo que se merece
ivancea96


Desconectado Desconectado

Mensajes: 3.412


ASMático


Ver Perfil WWW
Re: Compilar una librería dinámica como estática C
« Respuesta #3 en: 2 Agosto 2016, 21:28 pm »

Si la estática la tiene, pero yo quiero saber si existe alguna manera de compilar la libraria dinamica de manera estatica en un programa. Porque es muy pesado que en cada proyecto tenga que añadir las librerias a cada carpeta y demás.

No tendría sentido meter una DLL en el ejecutable. Las DLL están hechas para eso, poderlas manejar, re-compilar, modificar; sin tener que re-compilar el ejecutable.

Para compilar en estático, linkea con las librerías estáticas.
En línea

Yoel Alejandro

Desconectado Desconectado

Mensajes: 254



Ver Perfil WWW
Re: Compilar una librería dinámica como estática C
« Respuesta #4 en: 6 Agosto 2016, 23:44 pm »

Hola, estoy recién leyendo el tema y no se si lo que voy a decir sea relevante al problema discutido. Pero creo que en GNU si están presentes ambas librerías, la dinámica y la estática, tomará por defecto la dinámica (por la razón que señaló ivance en su último mensaje).

Hay que indicar explícitamente al compilador que tome la estática en lugar de la dinámica. Pero a mí en ocasiones no me ha funcionado, pues insiste en tomar la dinámica. A veces he tenido que borrar temporalmente la librería dinámica para que se vea obligado a tomar la estática. Claro, en realidad no la he borrado, solo renombré la dinámica (para que el compilador no la encuentre), compilé y luego restituí todo como estaba.

P.D.
---------------------
Claro, eso de incluir las bibliotecas estáticas dentro del propio ejecutable es algo ineficiente, pues como dijo ivance, las bibliotecas dinámicas "están hechas para eso, poderlas manejar, re-compilar, modificar; sin tener que re-compilar el ejecutable". Para mí no tendría sentido a menos que fuese una biblioteca que tú mismo has creado con objetivos muy específicos, en cuyo caso sí conviene que, o crees una carpeta "lib" dentro del directorio de tu aplicación la cual contenga todas las bibliotecas, o compiles con las bibliotecas estáticas.
« Última modificación: 6 Agosto 2016, 23:47 pm por Yoel Alejandro » En línea

Saludos, Yoel.
P.D..-   Para mayores dudas, puedes enviarme un mensaje personal (M.P.)
do-while


Desconectado Desconectado

Mensajes: 1.276


¿Habra que sacarla de paseo?


Ver Perfil
Re: Compilar una librería dinámica como estática C
« Respuesta #5 en: 7 Agosto 2016, 00:51 am »

¡Buenas!

Da la casualidad de que esta mañana (¿o fue ayer? ni idea) he visto algo relacionado. Supongo que estás usando alguna distro Linux. Al parecer las versiones para enlazar estáticamente se guardan en /usr/lib, y la extensión en lugar de ser .so es .a (solo he leído un comentario y no se dónde, así que si me equivoco corregidme), y a la hora de compilar debes de pasarle a gcc un parámetro que le diga con que librería debe de enlazarse el ejecutable, algo así como: gcc -lunalibrería.a fuente1.c fuente2.c ... -o tuejecutable

Mira a ver si en las páginas del manual o en la página oficial de la librería tienes información concreta sobre como hacer el enlace estático.

Si no es así decídmelo, que me pica la curiosidad pero no tanto como para estar dando vueltas por Google.  :xD
En línea

- Doctor, confundo los números y los colores.
- Vaya marrón.
- ¿Marrón? ¡Por el culo te la hinco!
Yoel Alejandro

Desconectado Desconectado

Mensajes: 254



Ver Perfil WWW
Re: Compilar una librería dinámica como estática C
« Respuesta #6 en: 7 Agosto 2016, 02:00 am »

Do-while, es correcto, en Linux la extensión por defecto es "*.a" para bibliotecas estáticas, y "*.so" para dinámicas. En Windows es normalmente "*.dll" para biliotecas dinámicas.

Aquí un excelente tutorial, que fue justamente donde leí por primera vez lo relacionado con el tema http://www.chuidiang.com/clinux/herramientas/librerias.php
En línea

Saludos, Yoel.
P.D..-   Para mayores dudas, puedes enviarme un mensaje personal (M.P.)
Páginas: [1] Ir Arriba Respuesta Imprimir 

Ir a:  

Mensajes similares
Asunto Iniciado por Respuestas Vistas Último mensaje
¿Como puedo crear una libreria estatica con flat assembler?
ASM
Avoidance25 6 5,931 Último mensaje 8 Noviembre 2009, 23:18 pm
por Eternal Idol
¿Cómo puedo cambiar mi dirección IP estática a IP dinámica?
Redes
vincent13m 5 16,074 Último mensaje 13 Enero 2011, 17:26 pm
por ignutius
como cambiar la ip estatica , dinamica y la mac de mi pc?
Redes
kantus 2 6,830 Último mensaje 19 Enero 2011, 18:35 pm
por RyogiShiki
Como se hace para cambiar de IP estatica a dinamica?
Redes
win_7 4 3,377 Último mensaje 18 Agosto 2013, 21:12 pm
por simorg
¿como conseguir librería estática de curl?
Programación General
Kaxperday 2 2,496 Último mensaje 9 Noviembre 2015, 00:19 am
por Kaxperday
WAP2 - Aviso Legal - Powered by SMF 1.1.21 | SMF © 2006-2008, Simple Machines