Recent

Author Topic: Problema con libreria dinamica  (Read 25885 times)

hexxa

  • New Member
  • *
  • Posts: 26
Problema con libreria dinamica
« on: June 23, 2021, 04:09:13 pm »
Buen día, tengo un inconveniente con el uso de una librería dinamica compilada a partir de los fuentes.
No se si estoy haciendo bien los pasos para compilarla.
Los fuentes estan descargados de https://github.com/reingart/pyafipws/tree/master/src.
Para compilar uso:
  gcc -c libpyafipws.c -o libpyafipws.o -fPIC
  ld -o libpyafipws.so libpyafipws.o -shared
La libreria se crea correctamente, sin errores. Tiene los permisos correctos, la copie a la carperta donde esta el ejecutable desde el cual intento utilizarla, ademas la copie a la carpeta /lib.
En mi programa tengo definida la variable:
 
  PyAfipWs: TLibHandle = dynlibs.NilHandle;

y utilizo el sgte codigo para cargarla:
 
  PyAfipWs := LoadLibrary('libpyafipws.so');

  if PyAfipWs = dynlibs.NilHandle then
    showmessage('La libreria "libpyafipws.so" no se cargo correctamente.');

Obviamente recibo el mensaje que no se cargo la libreria.
Utilizo Lazarus 2.0.4. Probe en Debian y Ubuntu sin exito.
Aclaro que utilizo el mismo codigo para cargar otra libreria y la carga correctamente, por eso creo que estoy haciendo algo mal al compilarla.
Cualquier ayuda será bienvenida.
Saludos

Fred vS

  • Hero Member
  • *****
  • Posts: 3158
    • StrumPract is the musicians best friend
Re: Problema con libreria dinamica
« Reply #1 on: June 23, 2021, 06:20:12 pm »
Hola!

¿Intentaste con la ruta completa del archivo?

Code: Pascal  [Select][+][-]
  1. PyAfipWs := LoadLibrary('/home/ruta_competa_del_archivo/libpyafipws.so');

Y ver si los métodos de la librería hemos sido exportados:

Code: Bash  [Select][+][-]
  1. nm -D libpyafipws.so
« Last Edit: June 23, 2021, 06:44:10 pm by Fred vS »
I use Lazarus 2.2.0 32/64 and FPC 3.2.2 32/64 on Debian 11 64 bit, Windows 10, Windows 7 32/64, Windows XP 32,  FreeBSD 64.
Widgetset: fpGUI, MSEgui, Win32, GTK2, Qt.

https://github.com/fredvs
https://gitlab.com/fredvs
https://codeberg.org/fredvs

hexxa

  • New Member
  • *
  • Posts: 26
Re: Problema con libreria dinamica
« Reply #2 on: June 23, 2021, 11:11:37 pm »
Hola Fred, gracias por responder.
1 - Probe pasar la ruta completa donde se encuentra la librera y tampoco la carga.
2 - Pego la respuesta del comando "nm -D libpyafipws.so"
0000000000001637 T cstr
000000000000169f T format_ex
                 U fprintf
                 U free
                 U malloc
                 U puts
00000000000019c9 T PYAFIPWS_CreateObject
0000000000001b00 T PYAFIPWS_DestroyObject
0000000000001c6b T PYAFIPWS_Free
0000000000001b46 T PYAFIPWS_Get
0000000000001bd0 T PYAFIPWS_Set
                 U PyCallable_Check
                 U PyClass_Type
                 U PyDict_New
                 U PyDict_SetItemString
                 U PyErr_Fetch
                 U PyErr_NormalizeException
                 U PyErr_Print
                 U PyEval_GetBuiltins
                 U Py_Finalize
                 U Py_GetPath
                 U PyImport_Import
                 U Py_Initialize
                 U PyObject_CallObject
                 U PyObject_GetAttrString
                 U PyObject_SetAttrString
                 U PyObject_Str
                 U PyOS_snprintf
                 U PyRun_SimpleStringFlags
                 U PyRun_StringFlags
                 U PyString_AsString
                 U PyString_FromString
                 U PyString_Size
                 U __stack_chk_fail
                 U stderr
                 U strlen
                 U strncpy
0000000000001477 T test

Fred vS

  • Hero Member
  • *****
  • Posts: 3158
    • StrumPract is the musicians best friend
Re: Problema con libreria dinamica
« Reply #3 on: June 24, 2021, 11:12:04 am »
Quote
2 - Pego la respuesta del comando "nm -D libpyafipws.so"

Hum, el resultado parece correcto.

¿Estás seguro de que la librería tiene los mismos bits que el programa?

Si la librería se compiló en 64 bits, el programa también debe estar en 64 bits (o con 32 bits es igual).

Para comprobar los bits de la librería:
Code: Bash  [Select][+][-]
  1. file libpyafipws.so
« Last Edit: June 24, 2021, 11:19:25 am by Fred vS »
I use Lazarus 2.2.0 32/64 and FPC 3.2.2 32/64 on Debian 11 64 bit, Windows 10, Windows 7 32/64, Windows XP 32,  FreeBSD 64.
Widgetset: fpGUI, MSEgui, Win32, GTK2, Qt.

https://github.com/fredvs
https://gitlab.com/fredvs
https://codeberg.org/fredvs

Fred vS

  • Hero Member
  • *****
  • Posts: 3158
    • StrumPract is the musicians best friend
Re: Problema con libreria dinamica
« Reply #4 on: June 24, 2021, 11:41:35 am »
Re-hola.

Parece que la libreria es para aplicaciones "Python":

Code: Pascal  [Select][+][-]
  1. #include <Python.h>
  2. ...
  3. /* Start-up the python interpreter */

No sé si esto funcionará para una aplicación nativa compilada con fpc.
« Last Edit: June 24, 2021, 12:06:37 pm by Fred vS »
I use Lazarus 2.2.0 32/64 and FPC 3.2.2 32/64 on Debian 11 64 bit, Windows 10, Windows 7 32/64, Windows XP 32,  FreeBSD 64.
Widgetset: fpGUI, MSEgui, Win32, GTK2, Qt.

https://github.com/fredvs
https://gitlab.com/fredvs
https://codeberg.org/fredvs

hexxa

  • New Member
  • *
  • Posts: 26
Re: Problema con libreria dinamica
« Reply #5 on: June 24, 2021, 02:42:12 pm »
La libreria la compilo en la misma pc donde despues trato de usarla. Probe en 2 pc, tanto en 32 como 64 bits.

Quizas sea como decis y solo sirva para ser utilizarla en aplicaciones Python.

hexxa

  • New Member
  • *
  • Posts: 26
Re: Problema con libreria dinamica
« Reply #6 on: June 28, 2021, 12:54:15 pm »
Por lo que entiendo de lo que dice el desarrollador de la librerìa se puede utilizar desde diferentes lenguajes, no necesariamente Python.
Dejo el link: http://www.sistemasagiles.com.ar/trac/wiki/LibPyAfipWs

Fred vS

  • Hero Member
  • *****
  • Posts: 3158
    • StrumPract is the musicians best friend
Re: Problema con libreria dinamica
« Reply #7 on: June 28, 2021, 03:11:55 pm »
Buenos dias.

¿Puedes incluir la libreria aquí como archivo adjunto?
I use Lazarus 2.2.0 32/64 and FPC 3.2.2 32/64 on Debian 11 64 bit, Windows 10, Windows 7 32/64, Windows XP 32,  FreeBSD 64.
Widgetset: fpGUI, MSEgui, Win32, GTK2, Qt.

https://github.com/fredvs
https://gitlab.com/fredvs
https://codeberg.org/fredvs

hexxa

  • New Member
  • *
  • Posts: 26
Re: Problema con libreria dinamica
« Reply #8 on: June 29, 2021, 05:22:33 pm »

Fred vS

  • Hero Member
  • *****
  • Posts: 3158
    • StrumPract is the musicians best friend
Re: Problema con libreria dinamica
« Reply #9 on: June 29, 2021, 06:15:11 pm »
Buen día, dejo el link con la libreria compilada.

https://drive.google.com/file/d/1zYZ7p2zxHhUu4zlMqcC6-SbjlpNDCxfQ/view?usp=sharing

De hecho si hay problemas, con esto:

Code: Pascal  [Select][+][-]
  1. program dynlyb_test;
  2.  
  3. uses
  4. sysutils,dynlibs;
  5.  
  6. begin
  7. writeln(inttostr(loadlibrary('/home/fred/libpafipws.so')));
  8. end.

entiendo esto;

Code: Bash  [Select][+][-]
  1. fred@fiens ~> ./dynlib_test
  2.  
  3. 0

Y y tambien con
Code: Pascal  [Select][+][-]
  1. safeloadlibrary('/home/fred/libpyafipws.so')

Lo siento pero no entiendo por qué.

 :-\
I use Lazarus 2.2.0 32/64 and FPC 3.2.2 32/64 on Debian 11 64 bit, Windows 10, Windows 7 32/64, Windows XP 32,  FreeBSD 64.
Widgetset: fpGUI, MSEgui, Win32, GTK2, Qt.

https://github.com/fredvs
https://gitlab.com/fredvs
https://codeberg.org/fredvs

Fred vS

  • Hero Member
  • *****
  • Posts: 3158
    • StrumPract is the musicians best friend
Re: Problema con libreria dinamica
« Reply #10 on: June 29, 2021, 06:36:48 pm »
Re- Hola

Creo que el problema está en la libreria compilada con "static link".

Loadlibrary() solo funciona con librerias dinámicas.
Aquí está el resultado de lld de libreria con enlace dinámico:

Code: Bash  [Select][+][-]
  1. fred@fiens ~> ldd /home/fred/LibMpg123-64.so
  2.          linux-vdso.so.1 (0x00007ffc7abfa000)
  3.         libm.so.6 => /lib/x86_64-linux-gnu/libm.so.6 (0x00007fb56f315000)
  4.         libdl.so.2 => /lib/x86_64-linux-gnu/libdl.so.2 (0x00007fb56f310000)
  5.         libc.so.6 => /lib/x86_64-linux-gnu/libc.so.6 (0x00007fb56f14f000)
  6.         /lib64/ld-linux-x86-64.so.2 (0x00007fb56f722000)
  7.  

Y aquí está el resultado de lld de llibpyafipws.so static:

Code: Bash  [Select][+][-]
  1. fred@fiens ~> ldd /home/fred/libpyafipws.so
  2.         statically linked

Tal vez podrías volver a compilar la libreria con dynamic link.

[EDIT] Tal vez compilar la libreria con:
Code: Pascal  [Select][+][-]
  1. -DDLL_EXPORTS
« Last Edit: June 29, 2021, 08:27:07 pm by Fred vS »
I use Lazarus 2.2.0 32/64 and FPC 3.2.2 32/64 on Debian 11 64 bit, Windows 10, Windows 7 32/64, Windows XP 32,  FreeBSD 64.
Widgetset: fpGUI, MSEgui, Win32, GTK2, Qt.

https://github.com/fredvs
https://gitlab.com/fredvs
https://codeberg.org/fredvs

hexxa

  • New Member
  • *
  • Posts: 26
Re: Problema con libreria dinamica
« Reply #11 on: July 02, 2021, 01:40:00 pm »
Buen día, el resultado que obtengo con ldd es el sgte:

Code: Bash  [Select][+][-]
  1. ldd /lib/libpyafipws.so
  2.         no es un ejecutable dinámico

Fred vS

  • Hero Member
  • *****
  • Posts: 3158
    • StrumPract is the musicians best friend
Re: Problema con libreria dinamica
« Reply #12 on: July 02, 2021, 01:50:17 pm »
Buen día, el resultado que obtengo con ldd es el sgte:

Code: Bash  [Select][+][-]
  1. ldd /lib/libpyafipws.so
  2.         no es un ejecutable dinámico

Entonces hay un problema en la libreria.

¿Ha intentado compilarlo con esto:?

Code: Bash  [Select][+][-]
  1.   gcc -c libpyafipws.c -o libpyafipws.o -fPIC -shared -DDLL_EXPORTS
I use Lazarus 2.2.0 32/64 and FPC 3.2.2 32/64 on Debian 11 64 bit, Windows 10, Windows 7 32/64, Windows XP 32,  FreeBSD 64.
Widgetset: fpGUI, MSEgui, Win32, GTK2, Qt.

https://github.com/fredvs
https://gitlab.com/fredvs
https://codeberg.org/fredvs

hexxa

  • New Member
  • *
  • Posts: 26
Re: Problema con libreria dinamica
« Reply #13 on: July 06, 2021, 01:19:46 pm »
Buenas, sigue sin poder cargar la libreria, al compilar con
Code: Bash  [Select][+][-]
  1.  gcc -c libpyafipws.c -o libpyafipws.o -fPIC -shared -DDLL_EXPORTS
  2. ld -o libpyafipws.so libpyafipws.o -shared -fPIC
  3.  
Obtengo
Code: Bash  [Select][+][-]
  1. ldd /lib/libpyafipws.so
  2.         statically linked

Fred vS

  • Hero Member
  • *****
  • Posts: 3158
    • StrumPract is the musicians best friend
Re: Problema con libreria dinamica
« Reply #14 on: July 06, 2021, 02:22:58 pm »
Hola.

No lo sé, lo siento, tal vez deberías preguntarle al creador de la libreria o al foro de gcc.
I use Lazarus 2.2.0 32/64 and FPC 3.2.2 32/64 on Debian 11 64 bit, Windows 10, Windows 7 32/64, Windows XP 32,  FreeBSD 64.
Widgetset: fpGUI, MSEgui, Win32, GTK2, Qt.

https://github.com/fredvs
https://gitlab.com/fredvs
https://codeberg.org/fredvs

 

TinyPortal © 2005-2018