Autor
|
Tema: Compilar una librería dinámica como estática C (Leído 4,993 veces)
|
mester
Desconectado
Mensajes: 219
https://www.youtube.com/watch?v=IlY9C6pzxKc
|
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
Mensajes: 3.412
ASMático
|
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
Mensajes: 219
https://www.youtube.com/watch?v=IlY9C6pzxKc
|
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
Mensajes: 3.412
ASMá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.
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
|
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
Mensajes: 1.276
¿Habra que sacarla de paseo?
|
¡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.
|
|
|
En línea
|
- Doctor, confundo los números y los colores. - Vaya marrón. - ¿Marrón? ¡Por el culo te la hinco!
|
|
|
Yoel Alejandro
|
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.)
|
|
|
|
Mensajes similares |
|
Asunto |
Iniciado por |
Respuestas |
Vistas |
Último mensaje |
|
|
¿Como puedo crear una libreria estatica con flat assembler?
ASM
|
Avoidance25
|
6
|
5,910
|
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,034
|
13 Enero 2011, 17:26 pm
por ignutius
|
|
|
como cambiar la ip estatica , dinamica y la mac de mi pc?
Redes
|
kantus
|
2
|
6,787
|
19 Enero 2011, 18:35 pm
por RyogiShiki
|
|
|
Como se hace para cambiar de IP estatica a dinamica?
Redes
|
win_7
|
4
|
3,325
|
18 Agosto 2013, 21:12 pm
por simorg
|
|
|
¿como conseguir librería estática de curl?
Programación General
|
Kaxperday
|
2
|
2,456
|
9 Noviembre 2015, 00:19 am
por Kaxperday
|
|