Forum > Spanish

Problema con libreria dinamica

(1/7) > >>

hexxa:
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:
Hola!

¿Intentaste con la ruta completa del archivo?


--- Code: Pascal  [+][-]window.onload = function(){var x1 = document.getElementById("main_content_section"); if (x1) { var x = document.getElementsByClassName("geshi");for (var i = 0; i < x.length; i++) { x[i].style.maxHeight='none'; x[i].style.height = Math.min(x[i].clientHeight+15,306)+'px'; x[i].style.resize = "vertical";}};} ---PyAfipWs := LoadLibrary('/home/ruta_competa_del_archivo/libpyafipws.so');
Y ver si los métodos de la librería hemos sido exportados:


--- Code: Bash  [+][-]window.onload = function(){var x1 = document.getElementById("main_content_section"); if (x1) { var x = document.getElementsByClassName("geshi");for (var i = 0; i < x.length; i++) { x[i].style.maxHeight='none'; x[i].style.height = Math.min(x[i].clientHeight+15,306)+'px'; x[i].style.resize = "vertical";}};} ---nm -D libpyafipws.so

hexxa:
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:

--- Quote ---2 - Pego la respuesta del comando "nm -D libpyafipws.so"
--- End quote ---

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  [+][-]window.onload = function(){var x1 = document.getElementById("main_content_section"); if (x1) { var x = document.getElementsByClassName("geshi");for (var i = 0; i < x.length; i++) { x[i].style.maxHeight='none'; x[i].style.height = Math.min(x[i].clientHeight+15,306)+'px'; x[i].style.resize = "vertical";}};} ---file libpyafipws.so

Fred vS:
Re-hola.

Parece que la libreria es para aplicaciones "Python":


--- Code: Pascal  [+][-]window.onload = function(){var x1 = document.getElementById("main_content_section"); if (x1) { var x = document.getElementsByClassName("geshi");for (var i = 0; i < x.length; i++) { x[i].style.maxHeight='none'; x[i].style.height = Math.min(x[i].clientHeight+15,306)+'px'; x[i].style.resize = "vertical";}};} ---#include <Python.h>.../* Start-up the python interpreter */
No sé si esto funcionará para una aplicación nativa compilada con fpc.

Navigation

[0] Message Index

[#] Next page

Go to full version