Foros del Web » Programación para mayores de 30 ;) » C/C++ »

Librerías dinamicas en c en linux

Estas en el tema de Librerías dinamicas en c en linux en el foro de C/C++ en Foros del Web. Hola necesito usar librerias dinamicas en linux pero cuando queiro ejecutarla me tira este error. error while loading shared libraries: libdll.so: cannot open shared object ...
  #1 (permalink)  
Antiguo 14/10/2010, 12:56
 
Fecha de Ingreso: mayo-2006
Mensajes: 79
Antigüedad: 17 años, 10 meses
Puntos: 0
Librerías dinamicas en c en linux

Hola necesito usar librerias dinamicas en linux pero cuando queiro ejecutarla me tira este error.

error while loading shared libraries: libdll.so: cannot open shared object file: No such file or directory


dll.c

Código c:
Ver original
  1. #include <stdio.h>
  2.  
  3. int hola(){
  4.     printf("Hola!!! Esto es un lindo Shared Object\n");
  5. return 0;
  6. }


dll.h

Código c:
Ver original
  1. #ifndef _DLL_H
  2. #define _DLL_H
  3.  
  4. int hola();
  5.  
  6. #endif


ejemplo.c
Código c:
Ver original
  1. #include <dll.h>
  2.  
  3. int main(){
  4.  
  5.     hola();
  6. return 0;
  7. }


y tengo el Makefile

Código c:
Ver original
  1. CFLAGS=-Wall -I.
  2. CC=gcc
  3.  
  4. all: ejemplo
  5.  
  6.  
  7. # Creamos el ejecutable ejemplo previamente  compilada la libreria dinamica
  8. # -ldll es para linkear con la libreria
  9. ejemplo: ejemplo.o libdll.so
  10.     $(CC) -o ejemplo $(CFLAGS) ejemplo.o -L. -Bdynamic -ldll
  11.     rm ejemplo.o
  12.  
  13. # Creamos la libreria dinamica.
  14. libdll.so: dll.c
  15.     $(CC) $(CFLAGS) -c -o dll.o dll.c
  16.     ld -o libdll.so dll.o -shared
  17.     rm dll.o



complilar compila bien pero desp quiero ejecutar y me tira el error.
a que se debe?
  #2 (permalink)  
Antiguo 15/10/2010, 10:17
AlvaroG
Invitado
 
Mensajes: n/a
Puntos:
Respuesta: Librerías dinamicas en c en linux

¿Está libdll en una carpeta donde el sistema pueda encontrarla? Linux no es como Windows, no encontrará una biblioteca que no esté en las carpetas del sistema. No vale simplemente ponerla en la misma carpeta que el ejecutable. (ver /etc/ldconf, si no recuerdo mal, para saber dónde busca el sistema las bibliotecas).

Podés usar LD_PRELOAD para forzar la carga de una biblioteca cualquiera, revisá bien la documentación. Ejemplos:
Código:
LD_PRELOAD=libdll.so miprograma
para ejecutar miprograma usando la libdll especificada, o
Código:
LD_PRELOAD=libdll.so
para que se haga disponible a todos los programas que requieran libdll y se ejecuten desde la shell actual.


Saludos.

Etiquetas: dinamicas, librerías, linux
Atención: Estás leyendo un tema que no tiene actividad desde hace más de 6 MESES, te recomendamos abrir un Nuevo tema en lugar de responder al actual.
Respuesta




La zona horaria es GMT -6. Ahora son las 22:16.